我开始浏览Django的权威指南,现在我想开始自己的项目。我有Django设置和一切。我创建了一个名为djangoproject1的项目。基本上我想要的是主页面是注册/登录页面。我对djangoproject1的urls.py看起来像这样:
urlpatterns = patterns('',
(r'^/',include('djangoproject1.authentication.urls')),
)
我在djangoproject1下有一个名为authentication的pydev包(应用程序),它有一个urls.py,如下所示:
urlpatterns = patterns('',
(r'^$',direct_to_template,{'template':'index.html'}),
)
几个问题:
答案 0 :(得分:2)
Asinox说的不是真的。您可以拥有一个全局模板目录,甚至是其中的几个。但这不是必须的。
实际上模板加载如下:
TEMPLATE_LOADERS
设置变量TEMPLATE_LOADERS
中列出的模板加载器未设置加载模板TemplateDoesNotExist
异常,则默认情况下,TEMPLATE_LOADERS
设置为
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.load_template_source',
'django.template.loaders.app_directories.load_template_source',
)
正如Matthew所说,TEMPLATE_DIRS
仅由filesystem.load_template_source
加载器使用。因此,如果将其从列表中排除,则根本不会对模板加载过程产生任何影响。
为了找到您的模板,我建议您执行以下操作:
. `-- djangoproject1 `-- authentication `-- templates `-- authentication `-- index.html
urlpatterns = patterns('',
(r'^$', direct_to_template, {'template': 'authentication/index.html'}),
)
除非您这样做,否则您无法确定Django是否从身份验证应用程序加载index.html。
考虑app_directories.load_template_source
模板加载器的行为。
假设你刚刚定义了两个应用程序 app1 和 app2 (没有定义其他应用程序)并要求加载模板'path / to / template.html'。< / p>
加载程序将按特定顺序检查以下路径:
答案 1 :(得分:1)
Django不会自动查找模板目录,但是在settings.py中有一个名为django.template.loaders.app_directories.Loader的模板加载器(默认情况下是这样)。我建议不要使用它,因为它没有命名模板。这意味着在appone / templates下名为index.html的模板将在apptwo / templates下隐藏名为index.html的模板(如果apptwo低于INSTALLED_APPS中的appone。
答案 2 :(得分:0)
是的,Django将在其他地方搜索,但您需要项目下的模板目录。