django模板文件夹需要创建一个以应用名称命名的子文件夹,然后包含模板文件。当python manage.py collectstatic可以在遍历所有目录时推断出这些信息时,为什么需要这样做?这似乎非常多余。
python manage.py collectstatic
g2ieeal71#
首先,Django并不需要这种特定的文件夹结构来让模板工作,它只是一种既定的模式。当然,它有一个基本原理,正如官方文档所指出的那样:模板命名空间现在我们可以直接把模板放在polls/templates中了(而不是创建另一个polls子目录),但这实际上是一个坏主意。Django将选择它找到的第一个名称匹配的模板,如果您在不同的应用程序中有一个同名的模板,Django将无法区分它们。我们需要能够将Django指向正确的模板,最简单的方法是给它们命名,也就是说,把这些模板放在另一个以应用程序本身命名的目录中。具体情况可以参考this question或that another。简而言之,通过遵循此模式,您可以将模板组织成2组:1.与您的特定站点或项目相关的模板可以位于TEMPLATES['DIRS']设置所指向的目录中;1.与特定应用程序相关的模板,如果您使应用程序可插入,则可以 * 按原样 * 提供,应该位于'./appname/templates/appname/'中(并且TEMPLATES['APP_DIRS']必须为True)。这样可以避免此文件夹内的文件与外部文件之间的名称冲突。
TEMPLATES['DIRS']
'./appname/templates/appname/'
TEMPLATES['APP_DIRS']
1条答案
按热度按时间g2ieeal71#
首先,Django并不需要这种特定的文件夹结构来让模板工作,它只是一种既定的模式。当然,它有一个基本原理,正如官方文档所指出的那样:
模板命名空间
现在我们可以直接把模板放在polls/templates中了(而不是创建另一个polls子目录),但这实际上是一个坏主意。Django将选择它找到的第一个名称匹配的模板,如果您在不同的应用程序中有一个同名的模板,Django将无法区分它们。我们需要能够将Django指向正确的模板,最简单的方法是给它们命名,也就是说,把这些模板放在另一个以应用程序本身命名的目录中。
具体情况可以参考this question或that another。
简而言之,通过遵循此模式,您可以将模板组织成2组:
1.与您的特定站点或项目相关的模板可以位于
TEMPLATES['DIRS']
设置所指向的目录中;1.与特定应用程序相关的模板,如果您使应用程序可插入,则可以 * 按原样 * 提供,应该位于
'./appname/templates/appname/'
中(并且TEMPLATES['APP_DIRS']
必须为True)。这样可以避免此文件夹内的文件与外部文件之间的名称冲突。