Конфигурация шаблонов

Последнее обновление: 16.08.2022

За конфигурацию шаблонов в проекте отвечает переменная TEMPLATES в файле settings.py. По умолчанию она имеет следующее содержимое:

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',
            ],
        },
    },
]

Данная переменная принимает список конфигураций для каждого движка шаблонов. По умолчанию определена одна конфигурация, которая имеет следующшие параметры

  • BACKEND: движок шаблонов. По умолчанию применяется встроенный движок django.template.backends.django.DjangoTemplates

  • DIRS: определяет список каталогов, где движок шаблонов будет искать файлы шаблонов. По умолчанию пустой список

  • APP_DIRS: указывает, будет ли движок шаблонов искать шаблоны внутри папок приложений в папке templates.

  • OPTIONS: определяет дополнительный список параметров. В частности, указывает, какие обработчики (процессоры) будут использоваться при обработке шаблонов.

Пути к шаблонам

По умолчанию параметр APP_DIRS имеет значение True, а это значит, что движок шаблонов будет также искать нужные файлы шаблонов в папке приложения в каталоге templates. Это довольно удобно, если для каждого приложения предназначены какие-то свои шаблоны. Это также позволяет избежать проблем с наименованиями.

Тем не менее иногда возникает необходимость размещения шаблонов где-то в другом месте. Например, у нас есть общие шаблоны для всего проекта - для всех приложений, и было бы логично разместить их в каком-то одном общем месте, например, в папке проекта. К примеру, определим в каталоге проекта папку templates (название папки может быть любым). И в этой папке определим файл index.html с каким-нибудь простейшим кодом:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Django on METANIT.COM</title>
</head>
<body>
    <h1>Hello METANIT.COM!</h1>
</body>
</html>
Пути к шаблонам в Django

В моем случае проект называется metanit, который располагается в одноименной папке. В проекте находится папка templates с одним шаблоном. Но чтобы этот шаблон задействовать, надо настроить пути к этой папке в файле setting.py. Так, изменим переменную TEMPLATES:

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

В данном случае в список папок DIRS добавляется один путь - BASE_DIR / "metanit/templates". Для образования пути берется определенная в начале файла settings.py переменная BASE_DIR:

BASE_DIR = Path(__file__).resolve().parent.parent

которая представляет путь к каталогу, в котором располгается папка проекта. И к этому пути добавляется папка проекта (metanit) и каталог templates.

Пусть в views.py определена функция, которая использует шаблон index.html:

from django.shortcuts import render
 
def index(request):
    return render(request, "index.html")

И в файле urls.py определен маршрут для этой функции:

from django.urls import path
from hello import views
 
urlpatterns = [
    path("", views.index),
]

Соответственно при обращении к функции index мы увидим в браузере содержимое файла index.html:

Настройка путей к каталогу шаблонов в Django и Python

Подобным образом мы можем указать в качестве хранилища шаблонов любой каталог внутри проекта или приложения или даже набор каталогов.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850