如何在Django中的不同目录中调用同名模板?

2024-04-19 15:17:12 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Django 1.8

我有两个同名的模板

base.html/mysite/templates/base.html

另一个来自同名应用程序(基本.html)在位置, /mysite/app/templates/base.html

我的模板设置

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

视图

^{pr2}$

这叫'基本.html,但如何从app/template目录调用模板。在

谢谢你的推荐!在

更新:

我已经将应用程序位置添加到模板目录中

'DIRS': [os.path.join(BASE_DIR, 'templates'), os.path.join(BASE_DIR, 'app/templates')],

现在我的IDE显示了这两个文件,但仍呈现了根目录的base.html。如何引用一个模板而不是另一个模板?在

更新: 修复了在应用程序模板级别添加一个目录的问题。在

现在我的应用程序模板目录结构如下所示

mysite/app/templates/app/base.html

如果应用程序在已安装的应用程序元组中,则TEMPLATE DIR中不需要os.path.join(BASE_DIR, 'app/templates')。在

更有效的django1.8解决方案值得欢迎。在


Tags: pathdjango模板app应用程序baseoshtml
2条回答

对于您当前的目录结构,您不能-这样做是为了允许您稍后在INSTALLED_APPS设置中通过应用程序覆盖模板。惯例是使用更类似于以下内容的目录结构:

app1/templates/app1/base.html
app2/templates/app2/base.html

然后使用app1/base.htmlapp2/base.html来引用您想要的那个。在

编辑

为了更清楚地说明我的意思:您的项目结构可以如下所示:

^{pr2}$

然后,您可以使用base.html获取第一个模板,使用app/base.html获取另一个模板,相关的应用程序模板都打包在它们引用的应用程序中,但都是名称空间的。在

最好在文件结构中创建额外级别。所以把模板放在templates/<app_name>/文件夹中。然后可以用templates/app1/base.htmltemplates/app2/base.html来引用它们。在

相关问题 更多 >