В предыдущих темах когда приходил запрос система маршрутизации выбирала нужное представление, и то уже в свою очередь использовало шаблон для генерации ответа. Hо в приниципе если в ответ на запрос нам просто надо возвратить пользователю содержимое шаблона, то для этого необязательно определять функцию-представления. Можно воспользоваться встроенным классом TemplateView.
Так, определим несколько простейших шаблонов. Пусть это будет файл about.html со следующим кодом:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Hello Django</title>
</head>
<body>
<h1>About</h1>
</body>
</html>
И также определим шаблон contact.html со следующим кодом:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Hello Django</title>
</head>
<body>
<h1>Contact</h1>
</body>
</html>
Изменим файл urls.py следующим образом:
from django.urls import path
from django.views.generic import TemplateView
urlpatterns = [
path("about/", TemplateView.as_view(template_name="about.html")),
path("contact/", TemplateView.as_view(template_name="contact.html")),
]
Фактически TemplateView сам по себе предоставляет функционалность представления. С помощью метода as_view() через параметр
template_name устанавливается путь к шаблону, который будет использоваться в качестве ответа.
В итоге при обращении по соответствующим адресам URL мы получим следующие результаты:
С помощью параметра extra_context в метод as_view можно передать данные для шаблона. Данные должны представлять словарь. Например:
from django.urls import path
from django.views.generic import TemplateView
urlpatterns = [
path("about/", TemplateView.as_view(template_name="about.html",
extra_context={"header": "О сайте"})),
path("contact/", TemplateView.as_view(template_name="contact.html")),
]
Здесь в шаблон "about.html" передается объект header, который представляет строку "О сайте". И в этом случае мы можем использовать этот объект в шаблоне:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Hello Django</title>
</head>
<body>
<h1>{{ header }}</h1>
</body>
</html>