Django模板结构问题

时间:2017-01-13 00:04:32

标签: python django django-templates

我有一个base.html模板,我的网站上的每个页面都会扩展。但是,从我收集的内容来看,Django要求模板应该在app目录中。从应用程序中,如何扩展我在项目的基础架构/模板/中的模板?

以下是我的目录的订购方式:

project/
|----templates/
|    |----base.html
|
|----app1/
|    |----templates/
|         |----app1/
|              |----base.html
|              |----index.html
|
|----app2/...

目前,我有index.html扩展app1 / base.html:

{% extends 'welcome/base.html' %}

但是,这并不理想,因为我想扩展project / templates / base.html。从逻辑上讲,我的app1里面不应该有模板。

Settings.py:

TEMPLATE_DIRS = (
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(PROJECT_ROOT, 'templates').replace('\\', '/'),
)

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

错误是我的app1 / views.py尝试渲染时:

{% extends 'welcome/base.html' %}

1 个答案:

答案 0 :(得分:1)

您可以使用{% extends 'base.html' %}。所有模板目录都提供相同的命名空间。基础模板在哪个模板目录中无关紧要,唯一重要的是它与模板目录的相对路径。

这也是您应该为特定于应用的模板使用前缀的原因。如果你没有,并同时拥有project/templates/base.htmlapp1/templates/base.html,Django会将它们视为同一个文件,其中一个会覆盖另一个。

{@ 1}}设置已弃用,有利于TEMPLATE_DIRS,如果设置后者,则会忽略TEMPLATES。您应该将目录添加到TEMPLATE_DIRS

'DIRS'