AI教程网 - 未来以来,拥抱AI;新手入门,从AI教程网开始......

Django2.0手册:Overriding templates

Django2.0手册 AI君 127℃

In your project, you might want to override a template in another Django
application, whether it be a third-party application or a contrib application
such as django.contrib.admin. You can either put template overrides in your
project’s templates directory or in an application’s templates directory.

If you have app and project templates directories that both contain overrides,
the default Django template loader will try to load the template from the
project-level directory first. In other words, DIRS
is searched before APP_DIRS.

Overriding from the project’s templates directory¶

First, we’ll explore overriding templates by creating replacement templates in
your project’s templates directory.

Let’s say you’re trying to override the templates for a third-party application
called blog, which provides the templates blog/post.html and
blog/list.html. The relevant settings for your project would look like:

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

INSTALLED_APPS = [
    ...,
    'blog',
    ...,
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        ...
    },
]

The TEMPLATES setting and BASE_DIR will already exist if you
created your project using the default project template. The setting that needs
to be modified is DIRS.

These settings assume you have a templates directory in the root of your
project. To override the templates for the blog app, create a folder
in the templates directory, and add the template files to that folder:

templates/
    blog/
        list.html
        post.html

The template loader first looks for templates in the DIRS directory. When
the views in the blog app ask for the blog/post.html and
blog/list.html templates, the loader will return the files you just created.

Overriding from an app’s template directory¶

Since you’re overriding templates located outside of one of your project’s
apps, it’s more common to use the first method and put template overrides in a
project’s templates folder. If you prefer, however, it’s also possible to put
the overrides in an app’s template directory.

First, make sure your template settings are checking inside app directories:

TEMPLATES = [
    {
        ...,
        'APP_DIRS': True,
        ...
    },
]

If you want to put the template overrides in an app called myapp and the
templates to override are named blog/list.html and blog/post.html,
then your directory structure will look like:

myapp/
    templates/
        blog/
            list.html
            post.html

With APP_DIRS set to True, the template
loader will look in the app’s templates directory and find the templates.

转载请注明:www.ainoob.cn » Django2.0手册:Overriding templates

喜欢 (0)or分享 (0)