Шаблоны (templates) отвечают за формирование внешнего вида приложения. Они предоставляют специальный синтаксис, который позволяет внедрять данные в код HTML.
Допустим, у нас есть проект metanit, и в нем определено одно приложение - hello:
Настройка функциональности шаблонов в проекте Django производится в файле settings.py. с помощью переменной TEMPLATES. Так, по умолчанию переменная 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:
Далее в файле index.html определим следующий код:
<!DOCTYPE html> <html> <head> <title>Django на METANIT.COM</title> <meta charset="utf-8" /> </head> <body> <h2>Hello METANIT.COM</h2> </body> </html>
По сути это обычная веб-страница, которая содержит код html. Теперь используем эту страницу для отправки ответа пользователю. И для этого перейдем в приложении hello к файлу views.py, который определяет функции для обработки запроса. Изменим этот файл следующим образом:
from django.shortcuts import render def index(request): return render(request, "index.html")
Из модуля django.shortcuts
импортируется функция render.
Функция index вызывает функцию render, которой передаются объект запроса request и путь к файлу шаблона в рамках папки templates - "index.html".
В файле urls.py проекта пропишем сопоставление функции index с запросом к корню веб-приложения:
from django.urls import path from hello import views urlpatterns = [ path("", views.index), ]
И запустим проект на выполнение и перейдем к приложению в браузере (если проект запущен, то его надо перезапустить):
Подобным образом можно указать и другие шаблоны. Например, в папку templates добавим еще две страницы: about.html и contact.html
И также в файле views.py определим функции, которые используют данные шаблоны:
from django.shortcuts import render def index(request): return render(request, "index.html") def about(request): return render(request, "about.html") def contact(request): return render(request, "contact.html")
А в файле urls.py свяжем функции с маршрутами:
from django.urls import path from hello import views urlpatterns = [ path("", views.index), path("about/", views.about), path("contact/", views.contact), ]
Выше для генерации шаблона применялась функция render(), которая является наиболее распространенным вариантом. Однако также мы можем использовать класс TemplateResponse:
from django.template.response import TemplateResponse def index(request): return TemplateResponse(request, "index.html")
Результат будет тот же самый.