Base template for all apps in Django

二次信任 提交于 2020-12-01 00:39:04

问题


I have a project with 2 apps

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

Now i want that the two apps extends the projects base.html. Is this the way to go? how it is possible and are there better solutions?

There is already an question which is handling this question, but it's only worth mentioning if you dont use split directories: Django project base template

tl;dr: I want to use split directories and want to know how to extend a base template from multiple apps without copying it to every app


回答1:


In current Django (1.10) TEMPLATE_DIRS is deprecated, so:

  1. Add a templates directory at the project root,
  2. In settings.py find TEMPLATES -> DIRS and add it like this:

    TEMPLATES = [
    {
        ...
        'DIRS': [(os.path.join(BASE_DIR, 'templates')),],
        ...
    }
    
  3. Add a base.html to that directory.

  4. Extend it wherever you want using {% extends 'base.html' %}



回答2:


  1. Add a templates directory at the project root, and add it to your TEMPLATE_DIRS setting.
  2. Add a base.html to that directory.
  3. Extend it wherever you want using {% extends 'base.html' %}



回答3:


For Django versions above 1.8 the upgrade doc suggests the vanilla settings (for most non-advanced django tangoers like me) be added to your 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',
            ],
        },
    },
]

Both BACKEND and OPTIONS were required, otherwise I had errors relating to 'INVALID BACKEND' and 'django.contrib.auth.context_processors.auth' must be in TEMPLATES'.



来源:https://stackoverflow.com/questions/29492617/base-template-for-all-apps-in-django

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!