Путь к шаблону Django
Я следую учебнику по http://docs.djangoproject.com/en/dev/intro/tutorial02/#intro-tutorial02 в среде Windows 7. Мой файл настроек:
TEMPLATE_DIRS = (
'C:/django-project/myapp/mytemplates/admin'
)
я получил base_template из шаблона admin/base_site.html из каталога шаблонов администратора Django по умолчанию в исходном коде самого Django (django/contrib/admin/templates) в подкаталог admin каталога myapp, как указано в руководстве.
кажется, это не займет влияют почему-то. Любой ключ к тому, что может быть проблемой? Нужно ли мне делать синхронизацию БД?
5 ответов:
Я знаю, что это не в учебнике Django, и стыдно за них, но лучше настроить относительные пути для переменных пути. Вы можете настроить его так:
import os PROJECT_PATH = os.path.realpath(os.path.dirname(__file__)) ... MEDIA_ROOT = PROJECT_PATH + '/media/' TEMPLATE_DIRS = ( PROJECT_PATH + '/templates/', )таким образом, вы можете переместить свой проект Django, и ваши корни пути будут автоматически обновляться. Это полезно при настройке рабочего сервера.
во-вторых, есть что-то подозрительное в вашем пути TEMPLATE_DIRS. Он должен указывать на корень каталога шаблона. Кроме того, он также должен конец в трейлинг
/.Я просто думаю, что здесь
.../admin/каталог не является корнем шаблона. Если вы все еще хотите написать абсолютные пути, вы должны вынуть ссылку на каталог шаблона администратора.TEMPLATE_DIRS = ( 'C:/django-project/myapp/mytemplates/' )при этом загрузчики шаблонов по умолчанию должны быть настроены на рекурсивное перемещение в каталоги приложений для поиска файлов шаблонов.
TEMPLATE_LOADERS = ( 'django.template.loaders.filesystem.load_template_source', 'django.template.loaders.app_directories.load_template_source', # 'django.template.loaders.eggs.load_template_source', )вам не нужно копировать шаблоны администратора, если только если вы специально хотите что-то переписать.
вам придется запустить syncdb, если вы еще не запустили его. Вам также потребуется статически сервер ваших медиа-файлов, если вы размещаете django через runserver.
Если вы используете установленные настройки Django, то почему бы просто не использовать его запеченные, предопределенные BASE_DIR и шаблоны? В pip установлен Django(v1. 8), я получаю:
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', ], }, }, ]
Для Django 1.6.6:
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) TEMPLATE_DIRS = os.path.join(BASE_DIR, 'templates')также статические и носители для отладки и производственного режима:
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%в urls.py вы должны добавить:
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)в Django 1.8 вы можете установить пути шаблонов, бэкэнд и другие параметры для шаблонов в одном словаре (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', ], }, }, ]
у меня также были проблемы с этой частью учебника (используется учебник для версии 1.7).
моя ошибка заключалась в том, что я редактировал только строку "Django administration" и не уделял достаточного внимания руководству.
этот django/contrib/admin/templates/admin / base_site.HTML-код:
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>но через некоторое время и разочарование стало ясно, что есть оператор 'site_header или default:_', который должен быть удален. Так после удаления оператора (как и в Примере в руководстве все работало так, как ожидалось).
пример руководства:
<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1>
интеллектуальное решение в Django 2.0.3 для хранения шаблонов в каталоге проекта (
/root/templates/app_name):settings.py
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) TEMP_DIR = os.path.join(BASE_DIR, 'templates') ... TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [TEMP_DIR], ...in views.py просто добавьте такой путь шаблона:
app_name/html_name
Comments