Что такое контекст в Django views?

Ответ

В Django **контекст** (context) — это **словарь** данных, который передаётся из **view** в **шаблон** для рендеринга. Его основная цель — сделать переменные доступными в шаблоне, обеспечивая разделение логики представления от данных. **Почему это важно:** Контекст позволяет шаблонам динамически отображать информацию, подготовленную во view, без прямого доступа к логике приложения, что улучшает читаемость и поддерживаемость кода. Обычно контекст передаётся как аргумент `context` в функции `render()`. **Пример использования:** ```python from django.shortcuts import render def my_view(request): data = { 'title': 'Главная страница', 'items': ['Item 1', 'Item 2', 'Item 3'], 'user_logged_in': True } return render(request, 'template.html', data) ``` В шаблоне `template.html` эти данные доступны по ключам словаря: ```django-html {{ title }} {% if user_logged_in %}

Добро пожаловать, {{ title }}!

{% else %}

{{ title }}

{% endif %}

Список элементов:

    {% for item in items %}
  • {{ item }}
  • {% endfor %}
``` **Контекстные процессоры:** Это функции, которые автоматически добавляют общие данные (например, объект `request`, информацию о текущем пользователе `user`) в контекст **всех** шаблонов. Они настраиваются в `settings.TEMPLATES.OPTIONS.context_processors` и помогают избежать дублирования кода для передачи одних и тех же данных в каждый view.

Ответ 18+ 🔞

А, слушай, про контекст в Джанге, да? Ну это ж, блядь, как мешок картошки, который ты тащишь из погреба на кухню! Представь: у тебя есть **view** — это твой погреб, где вся логика, всякая хуйня готовится. А **шаблон** — это кухня, где всё это красиво разложат и подадут. Так вот **контекст** — это тот самый хуёвый мешок, в который ты накидал из погреба всё, что нужно на кухне: картошку, лук, ну и бутылку горилки, чтоб не скучно было. По сути, это просто **словарь**, ёпта! Пары "ключ-значение". Кидаешь туда что угодно, а потом в шаблоне это достаёшь по имени, как из кармана зажигалку. **Зачем это, спросишь?** Да чтобы, блядь, не устраивать бардак! Логика — отдельно, показ — отдельно. Шаблон не должен лезть в твою бизнес-логику с грязными руками, он должен только показывать то, что ему скормили. Чистота, блядь, архитектурная! Передаётся это добро обычно третьим аргументом в `render()`. Смотри, как просто: ```python from django.shortcuts import render def my_view(request): # Вот тут мы в погребе набираем мешок data = { 'title': 'Главная страница', 'items': ['Item 1', 'Item 2', 'Item 3'], 'user_logged_in': True } # А тут тащим мешок на кухню (в шаблон) return render(request, 'template.html', data) ``` А на кухне (в `template.html`) уже разворачиваем этот мешок и используем всё, что внутри: ```django-html {{ title }} {% if user_logged_in %}

Добро пожаловать, {{ title }}!

{% else %}

{{ title }}

{% endif %}

Список элементов:

    {% for item in items %}
  • {{ item }}
  • {% endfor %}
``` **А теперь, блядь, сюрприз!** Есть же ещё **контекстные процессоры**! Это как твоя бабка, которая в каждый твой мешок, не спрашивая, всегда докидывает пару луковиц и пакет сухарей. Автоматом, нахуй! Настраиваются они в `settings.py` и добавляют одни и те же данные (например, объект запроса `request` или текущего юзера `user`) в контекст **ко всем шаблонам сразу**. Чтобы не писать в каждой view одно и то же, типа "а, ну ещё и `user` передать надо". Заебёшься, блядь! Вот так вот, просто и с душой. Не контекст, а песня, ебать мои старые костыли!