【问题标题】:Base template for all apps in DjangoDjango 中所有应用程序的基本模板
【发布时间】:2015-06-12 02:39:15
【问题描述】:

我有一个包含 2 个应用程序的项目

project/
    blog/
        templates/
            index.html
    polls/
        templates/
            index.html
    project/
        templates/
            base.html
            index.html

现在我希望这两个应用程序扩展项目base.html。这是要走的路吗?这怎么可能?有更好的解决方案吗?

已经有一个问题正在处理这个问题,但只有在您使用拆分目录时才值得一提: Django project base template

tl;dr:我想使用拆分目录并想知道如何从多个应用程序扩展基本模板而不将其复制到每个应用程序

【问题讨论】:

标签: django python-2.7


【解决方案1】:

在当前的 Django (1.10) TEMPLATE_DIRS is deprecated,所以:

  1. 在项目根目录下添加templates目录,
  2. settings.py 中找到 TEMPLATES -> DIRS 并像这样添加它:

    TEMPLATES = [
    {
        ...
        'DIRS': [(os.path.join(BASE_DIR, 'templates')),],
        ...
    }
    
  3. base.html 添加到该目录。

  4. 使用{% extends 'base.html' %} 将其扩展到任何你想要的地方

【讨论】:

  • 感谢您的提示!不确定何时更改,但BASE_DIRpathlib.Path 对象,因此您可以编写BASE_DIR / "templates" 而不是使用os.path.join
【解决方案2】:
  1. 在项目根目录下添加templates 目录,并将其添加到您的TEMPLATE_DIRS 设置中。
  2. base.html 添加到该目录。
  3. 使用{% extends 'base.html' %} 将其扩展到任何你想要的地方

【讨论】:

  • 我已经完成了,我的设置如下所示:TEMPLATE_DIRS = (os.path.join(BASE_DIR, 'templates/'),) 但这仍然不起作用
  • 去掉正斜杠。
【解决方案3】:

对于 1.8 以上的 Django 版本,upgrade doc 建议将原版设置(对于像我这样的大多数非高级 django 探戈者)添加到您的 settings.py 中:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [(os.path.join(BASE_DIR, 'my_Templates_Directory')),],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                # Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this
                # list if you haven't customized them:
                'django.contrib.auth.context_processors.auth',
                'django.template.context_processors.debug',
                'django.template.context_processors.i18n',
                'django.template.context_processors.media',
                'django.template.context_processors.static',
                'django.template.context_processors.tz',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

BACKEND 和 OPTIONS 都是必需的,否则我会遇到与“INVALID BACKEND”相关的错误,并且“django.contrib.auth.context_processors.auth”必须在 TEMPLATES 中。

【讨论】:

    猜你喜欢
    • 2016-02-10
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 2014-09-02
    • 2019-03-18
    • 1970-01-01
    • 2017-04-26
    相关资源
    最近更新 更多