2010-06-14 48 views
71

Tôi đang làm theo hướng dẫn trên http://docs.djangoproject.com/en/dev/intro/tutorial02/#intro-tutorial02 trong môi trường Windows 7. tập tin cài đặt của tôi là:Đường dẫn mẫu Django

TEMPLATE_DIRS = (
    'C:/django-project/myapp/mytemplates/admin' 
) 

tôi có base_template từ mẫu admin/base_site.html từ bên trong mặc định Django quản trị mẫu thư mục trong mã nguồn của Django bản thân (django/contrib/admin/mẫu) vào một thư mục con admin của myapp thư mục như hướng dẫn được hướng dẫn.

Điều này dường như không ảnh hưởng đến một số lý do. Bất kỳ đầu mối nào có thể là vấn đề? Tôi có phải làm một db đồng bộ không?

Trả lời

148

Tôi biết điều này không có trong hướng dẫn Django, và xấu hổ với họ, nhưng tốt hơn hết là thiết lập đường dẫn tương đối cho biến đường dẫn của bạn. Bạn có thể thiết lập nó như vậy:

import os 

PROJECT_PATH = os.path.realpath(os.path.dirname(__file__)) 

... 

MEDIA_ROOT = PROJECT_PATH + '/media/' 

TEMPLATE_DIRS = (
    PROJECT_PATH + '/templates/', 
) 

Bằng cách này bạn có thể di chuyển dự án Django và đường dẫn của bạn sẽ tự động cập nhật. Điều này rất hữu ích khi bạn thiết lập máy chủ sản xuất của mình.

Thứ hai, có điều gì đó đáng ngờ với đường dẫn TEMPLATE_DIRS của bạn. Nó sẽ trỏ đến thư mục gốc của thư mục mẫu của bạn. Ngoài ra, nó cũng sẽ kết thúc trong một dấu vết /.

Tôi sẽ đoán ở đây rằng thư mục .../admin/ không phải là mẫu gốc của bạn. Nếu bạn vẫn muốn viết đường dẫn tuyệt đối, bạn nên đưa ra tham chiếu đến thư mục mẫu admin.

TEMPLATE_DIRS = (
    'C:/django-project/myapp/mytemplates/' 
) 

Với điều đó đang được nói, các mẫu bộ tải theo mặc định nên được thiết lập để đệ quy đi qua vào thư mục ứng dụng của bạn để xác định vị trí các file mẫu.

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.load_template_source', 
    'django.template.loaders.app_directories.load_template_source', 
#  'django.template.loaders.eggs.load_template_source', 
) 

Bạn không cần phải sao chép qua các mẫu quản trị viên trừ khi bạn đặc biệt muốn ghi đè điều gì đó.

Bạn sẽ phải chạy một syncdb nếu bạn chưa chạy nó. Bạn cũng sẽ cần phải tĩnh máy chủ tập tin phương tiện truyền thông của bạn nếu bạn đang lưu trữ django thông qua máy chủ.

+1

cảm ơn bỏ rất nhiều "/ admin" ở cuối đường dẫn tương đối TEMPLATE_DIRS đã làm điều đó. – shaytac

+1

Đề xuất này đặt thư mục mẫu bên trong thư mục dự án. Để có tổ chức tốt hơn, thay vào đó, bạn nên đặt nó vào trong thư mục của ứng dụng hơn? –

+0

Chúc mừng cho câu trả lời này! –

5

Đối với Django 1.6.6:

BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 
TEMPLATE_DIRS = os.path.join(BASE_DIR, 'templates') 

Cũng tĩnh và phương tiện truyền thông cho debug và sản xuất chế độ:

STATIC_URL = '/static/' 
MEDIA_URL = '/media/' 
if DEBUG: 
    STATIC_ROOT = os.path.join(BASE_DIR, 'static') 
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 
else: 
    STATIC_ROOT = %REAL_PATH_TO_PRODUCTION_STATIC_FOLDER% 
    MEDIA_ROOT = %REAL_PATH_TO_PRODUCTION_MEDIA_FOLDER% 

Into urls.py bạn phải thêm:

from django.conf.urls import patterns, include, url 
from django.contrib import admin 
from django.conf.urls.static import static 
from django.conf import settings 

from news.views import Index 

admin.autodiscover() 

urlpatterns = patterns('', 
    url(r'^admin/', include(admin.site.urls)), 
    ... 
    ) 

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 

Trong Django 1.8 bạn có thể đặt đường dẫn mẫu, phụ trợ và các thông số khác cho mẫu trong một từ điển (settings.py):

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [ 
      path.join(BASE_DIR, 'templates') 
     ], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
     }, 
    }, 
] 

Official docs.

+0

Đường dẫn mẫu cần phải là một bộ dữ liệu: sử dụng TEMPLATE_DIRS = (os.path.join (BASE_DIR, 'mẫu') này) – renderbox

5

Tôi cũng có vấn đề với phần này của hướng dẫn (sử dụng hướng dẫn cho phiên bản 1.7).

Sai lầm của tôi là tôi chỉ chỉnh sửa chuỗi 'quản trị Django' và không chú ý đến hướng dẫn sử dụng.

Đây là dòng từ django/contrib/admin/templates/admin/base_site.html:

<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1> 

Nhưng sau một thời gian và thất vọng nó trở nên rõ ràng rằng có những 'site_header hoặc mặc định: _ 'tuyên bố, cần được loại bỏ. Vì vậy, sau khi loại bỏ các tuyên bố (như ví dụ trong hướng dẫn tất cả mọi thứ làm việc như mong đợi).

Ví dụ dẫn sử dụng:

<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1> 
21

Nếu sử dụng cài đặt Django như cài đặt, thì tại sao không chỉ cần sử dụng nướng-in, BASE_DIR được xác định trước và các mẫu của nó? Trong pip cài đặt Django (v1.8), tôi nhận được:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 


TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [ 
      ### ADD YOUR DIRECTORY HERE LIKE SO: 
      BASE_DIR + '/templates/', 
     ], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
     }, 
    }, 
] 
Các vấn đề liên quan