Django模板path

我在Windows 7环境下的教程http://docs.djangoproject.com/en/dev/intro/tutorial02/#intro-tutorial02 。 我的设置文件是:

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

我从Django本身的源代码(django / contrib / admin / templates)的默认Djangopipe理模板目录中获得了模板admin/base_site.html ,如教程指导的那样,进入了myapp目录的admin子目录。

由于某种原因,似乎没有影响。 任何线索可能是什么问题? 我必须做一个同步分贝?

我知道这不是在Django的教程,并在他们的遗憾,但最好为您的pathvariables设置相对path。 你可以这样设置:

 import os PROJECT_PATH = os.path.realpath(os.path.dirname(__file__)) ... MEDIA_ROOT = PROJECT_PATH + '/media/' TEMPLATE_DIRS = ( PROJECT_PATH + '/templates/', ) 

这样你可以移动你的Django项目,你的path根将自动更新。 这在设置生产服务器时非常有用。

其次,你的TEMPLATE_DIRSpath有可疑的东西。 它应该指向你的模板目录的根。 另外,它也应该以尾部/

我只是想在这里猜测.../admin/目录不是你的模板根目录。 如果你仍然想写绝对path,你应该拿出对pipe理模板目录的引用。

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

据说,默认情况下,模板加载器应该设置为recursion遍历到您的应用程序目录来定位模板文件。

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

除非您特别要重写某些内容,否则不需要复制pipe理员模板。

如果还没有运行,你将不得不运行syncdb。 如果您通过runserver托pipedjango,您还需要静态地为您的媒体文件服务器。

如果使用已安装的Django设置,那么为什么不直接使用预先定义好的BASE_DIR和TEMPLATES呢? 在安装了Django(v1.8)的pip中,我得到:

 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', ], }, }, ] 

我也遇到了本教程的这一部分的问题(使用1.7版教程)。

我的错误是我只编辑了“Djangopipe理”string,并没有对手册给予足够的重视。

这是来自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或默认:_'语句,应该删除。 所以在删除语句之后(就像手册中的示例一样,按预期工作)。

手册示例:

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

对于Django 1.6.6:

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

静态和媒体debugging和生产模式:

 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 )中为模板设置模板path,后端和其他参数:

 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ path.join(BASE_DIR, 'template') ], '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', ], }, }, ] 

官方文档。