Gre*_*ade 1 django django-templates
在 django 教程中,建议将应用程序的模板放入
project/app_name/templates/app_name
这导致它们被这样的视图引用:
class ScenarioDetails(generic.DetailView):
model = Scenario
template_name= "cmmods/scenario.html"
Run Code Online (Sandbox Code Playgroud)
我想了解这个建议背后的原因。
我看不出在什么情况下放入模板会变得很糟糕
project/app_name/templates
并这样引用它们:
class ScenarioDetails(generic.DetailView):
model = Scenario
template_name= "scenario.html"
Run Code Online (Sandbox Code Playgroud)
这个建议的背后是什么?
它避免了名称冲突,并且明确引用了模板所在的应用程序。
假设您的应用程序定义了几个非常相似的模板。实现此目的的一个简单方法是使用基本模板,例如'base.html'. 这是一个很常见的名称,其他应用程序很可能使用相同的名称。如果您将此模板放入根模板文件夹中,则名称会发生冲突,并且两个应用程序都会获得相同的模板,具体取决于哪个应用程序在您的INSTALLED_APPS.
通过将每个模板放入以您的应用程序命名的文件夹中,您可以避免这些名称冲突。仅通过模板名称即可更轻松地找到模板,如果您的应用程序使用其他应用程序的模板,这将非常有用。
detail.html假设您在应用程序中使用该模板app2。Django 将按照找到的顺序在所有模板文件夹中查找该模板。现在,您安装的应用程序如下所示:
INSTALLED_APPS = (
'app1',
'app2',
)
Run Code Online (Sandbox Code Playgroud)
detail.htmlDjango 将在以下位置查找该文件,并选择找到的第一个文件:
/path/to/project/app1/templates/detail.html
/path/to/project/app2/templates/detail.html
Run Code Online (Sandbox Code Playgroud)
即使app2需要模板文件 in app2/templates/,Django 也会在 中 提供模板app1/templates/(如果存在)。您得到了错误的模板,因为(相对)名称相同。
现在,如果您将模板放入 中app2/templates/app2/detail.html,则可以确定您获得了正确的模板。