在Django 1.4中,模板应该放在哪里?

4

我有点糊涂了,因为当我使用通用的ListView类时,Django会在"appname/templates"文件夹中寻找"appname/objectname_list.html"。这将导致:

appname/templates/appname/objectname_list.html

如果我提供了“template_name”,就不再需要templates文件夹内的子文件夹。为什么它不能像1.3中那样在“templates”文件夹中找到objectname_list.html?是我配置错误了还是他们更改了我应该放置模板的位置?在1.3版本中,我通常直接将模板HTML文件放在“appname/templates”中,而不使用子文件夹。对我来说,在已经有了templates文件夹的情况下,使用一个具有应用程序名称的子文件夹没有意义。或者我遗漏了一些有用的东西吗?我在发布说明中找不到任何关于这方面的内容。
1个回答

5
我不认为这是1.4特有的。如果你想让你的模板在子文件夹中,需要指定template_name = 'subfolde/template.html' 关于模板目录,根据文档
“对于 INSTALLED_APPS 中的每个应用程序,加载器都会查找 templates 子目录。如果该目录存在,则 Django 会在其中查找模板。”
因此,实际目录为:
projectname/appname/templates/appname/objectname_list.html
            ^^^               ^^^

这可以帮助你将所有内容都放在应用程序文件夹内,而无需进行任何配置。
这也意味着如果你有名为foo, barbaz的应用程序,仍然可以在其中一个应用程序下拥有一个templates目录:
myproj/foo/templates/foo/...
myproj/foo/templates/bar/...
myproj/foo/templates/baz/...

4
那么额外的子文件夹有什么用呢?是为了更轻松地将模板剪切并粘贴到另一个位置吗?但多次出现应用程序名称看起来很奇怪。 - JasonTS
1
它允许您覆盖/修改另一个应用程序的模板,即 myproj/foo/templates/admin/base_site.html - Udi
1
这不是有些杂乱吗?我知道子文件夹在projname/templates/appname/template.py中非常有用,但是覆盖另一个应用程序的模板会使它们非常纠缠。无论如何,非常感谢! - JasonTS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接