В предыдущих темах когда приходил запрос система маршрутизации выбирала нужное представление, и то уже в свою очередь использовало шаблон для генерации ответа. 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>