Django представлення на основі класів: 02 TemplateView

TemplateView у Django є потужним інструментом для роботи з шаблонами. Вона надає можливість використовувати шаблони для відображення даних, а також дозволяє гнучко додавати додатковий контекст для шаблонів. Основним класом для роботи з шаблонами є TemplateView, який успадковує кілька важливих класів: TemplateResponseMixin, ContextMixin та View.

Клас TemplateResponseMixin надає функціональність для рендерингу шаблонів. Його основні властивості включають:
- template_name, який визначає ім'я шаблону для рендерингу,
- template_engine, що вказує на движок шаблонів,
- response_class, який визначає клас відповіді (за замовчуванням це TemplateResponse),
- content_type, що задає тип вмісту відповіді.

Метод render_to_response(context, **response_kwargs) використовується для рендерингу шаблону з переданим контекстом.

Клас ContextMixin дозволяє додавати додаткові дані контексту до шаблону. Властивість extra_context дозволяє додавати користувацький контекст, а метод get_context_data(**kwargs) відповідає за підготовку даних контексту.

Клас View є базовим для всіх представлень у Django і забезпечує диспетчеризацію HTTP методів, таких як get, post тощо. Властивість http_method_names містить список дозволених HTTP методів, що може бути налаштовано.

Якщо подивитись на властивості, то важливо відзначити, що:
- template_name та інші властивості визначають поведінку рендерингу шаблонів,
- extra_context дозволяє додавати додаткові дані контексту,
- http_method_names допомагає обмежити методи, які будуть оброблятися.

Послідовність викликів методів для GET запиту виглядає наступним чином:
1. as_view() є точкою входу для обробки запиту, створюючи екземпляр представлення та викликаючи метод dispatch().
2. Метод setup() ініціалізує спільні атрибути для всіх методів представлення, такі як request, args та kwargs.
3. dispatch() визначає HTTP метод (наприклад, GET, POST) і перенаправляє запит до відповідного обробника (наприклад, get()).
4. get() обробляє GET запити, викликаючи get_context_data() для підготовки контексту для шаблону, а потім викликає render_to_response() для рендерингу шаблону.
5. Метод get_context_data() підготовлює контекст даних для шаблону, додавши додатковий контекст, якщо це необхідно.
6. Метод render_to_response() здійснює рендеринг шаблону з переданими даними контексту.
7. Метод get_template_names() повертає список шаблонів, які використовуються для рендерингу.

Приклад використання TemplateView в Django:

from django.views.generic.base import TemplateView

class MyTemplateView(TemplateView):
templatename = "myapp/example.html" # Вказуємо шаблон для рендерингу

def get_context_data(self, **kwargs):  
    # Додаємо додаткові дані контексту до шаблону  
    context = super().get_context_data(**kwargs)  
    context['title'] = "Welcome to My Template View"  
    context['message'] = "This is a simple example of TemplateView."  
    return context

Цей приклад показує, як можна створити представлення, яке рендерить шаблон і передає додаткові дані контексту, такі як заголовок і повідомлення, до шаблону.

Перекладено з: Django Class based views: 02 TemplateView