TemplateView

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

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

Изменим файл 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 мы получим следующие результаты:

Шаблоны и класс TemplateView  в Django

Передача данных в шаблоны

С помощью параметра 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>
TemplateView и передача данных в шаблоны в веб-приложении на Django и Python
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850