РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
296 of 818 menu

Класс TemplateView

Класс TemplateView применяется для отображения шаблонов без необходимости написания функции-контроллера. Он наследуется от базового класса View и предоставляет готовую реализацию для рендеринга шаблонов с контекстом. Основное преимущество этого класса в том, что он автоматически обрабатывает GET-запросы и возвращает ответ с отрендеренным шаблоном. Класс принимает параметр template_name для указания пути к шаблону.

Синтаксис

from django.views.generic import TemplateView class MyView(TemplateView): template_name = 'path/to/template.html'

Пример . С использованием в urls

Давайте создадим представление для отображения главной страницы:

from django.views.generic import TemplateView from django.urls import path urlpatterns = [ path('', TemplateView.as_view(template_name='index.html'), name='home'), ]

Пример . С передачей контекста

Давайте передадим данные в шаблон с помощью метода get_context_data:

from django.views.generic import TemplateView class ArticleListView(TemplateView): template_name = 'articles/list.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['articles'] = [ {'title': 'First article', 'author': 'John'}, {'title': 'Second article', 'author': 'Jane'}, ] return context

Результат выполнения кода:

"Context contains list of 2 articles"

Пример . С параметрами из URL

Давайте создадим представление, которое принимает параметр из URL:

from django.views.generic import TemplateView class ArticleDetailView(TemplateView): template_name = 'articles/detail.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) article_id = kwargs.get('id') context['article'] = { 'id': article_id, 'title': f'Article #{article_id}', 'content': 'This is the article content', } return context

Результат выполнения кода:

"Context contains article with id 42"

Пример . С использованием дополнительных атрибутов

Давайте используем атрибуты extra_context и content_type:

from django.views.generic import TemplateView class HomePageView(TemplateView): template_name = 'home.html' extra_context = {'title': 'Welcome', 'user_count': 1500} content_type = 'text/html'

Результат выполнения кода:

"Extra context contains title and user_count"

Пример . С переопределением метода dispatch

Давайте переопределим метод dispatch для дополнительной логики:

from django.views.generic import TemplateView from django.http import HttpResponseForbidden class AdminView(TemplateView): template_name = 'admin/dashboard.html' def dispatch(self, request, *args, **kwargs): if not request.user.is_authenticated: return HttpResponseForbidden('Access denied') return super().dispatch(request, *args, **kwargs)

Смотрите также

  • базовый класс View,
    от которого наследуются все классовые представления
  • атрибут template_name,
    который указывает путь к используемому шаблону
  • метод get_context_data,
    который формирует контекст для шаблона
  • класс ListView,
    который специализируется на отображении списков объектов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить