Django中所有应用程序的基本模板

时间:2015-04-07 13:18:00

标签: django python-2.7

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

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

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

已经有一个问题正在处理这个问题,但如果你使用拆分目录,那么它只值得一提: Django project base template

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

3 个答案:

答案 0 :(得分:25)

在当前的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' %}
  5. 将其扩展到任意位置

答案 1 :(得分:6)

  1. 在项目根目录添加templates目录,并将其添加到TEMPLATE_DIRS设置。
  2. base.html 添加到该目录。
  3. 使用{% extends 'base.html' %}
  4. 将其扩展到任意位置

答案 2 :(得分:1)

对于1.8以上的Django版本,upgrade doc表示将vanilla设置(对于像我这样的大多数非高级django tangoers)添加到您的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,否则我会遇到与“无效后退”相关的错误。和' django.contrib.auth.context_processors.auth'必须在TEMPLATES'。