2.7 KiB
2.7 KiB
status: seed type: concept tags: [django, routing, templates, cbv, fbv] created: 2026-05-30 updated: 2026-05-30 title: Django: Представления, шаблоны и CBV source: ["lec2-django_lec_urls_views_templates-1.pdf", "lec3-django_cbv-1.pdf", "p4-django_cbv-1.pdf"]
Django: Представления и Шаблоны
Маршрутизация (URL Routing)
- Описывается в
urlpatternsс помощьюpath()иre_path(). - Конвертеры:
<int:pk>,<slug:slug>,<uuid:id>. - Включение других файлов:
path('blog/', include('blog.urls')). - Реверсирование:
{% url 'name' %}в шаблонах илиreverse('name')в Python.
Представления (Views)
Views принимают HttpRequest и возвращают HttpResponse.
Функциональные представления (FBV)
from django.shortcuts import render, get_object_or_404
def index(request):
latest_items = Model.objects.all()[:5]
return render(request, "app/index.html", {"items": latest_items})
Классовые представления (CBV)
Абстрагируют типичные задачи. Вызываются в URL через .as_view().
- TemplateView: Отображение статического шаблона.
- ListView: Автоматический список объектов (данные в
object_list). - DetailView: Детальная информация об одном объекте (ищет по
pkилиslug).
Пример ListView:
class PostListView(ListView):
model = Post
template_name = "blog/list.html"
context_object_name = "posts"
paginate_by = 10
Шаблоны (Templates)
Используют Django Template Language (DTL).
Синтаксис
- Переменные:
{{ var.attr }}. - Теги:
{% if %},{% for %},{% url %},{% csrf_token %}. - Фильтры:
{{ date|date:"Y-m-d" }},{{ list|length }},{{ text|lower }}.
Наследование шаблонов
Позволяет избежать дублирования HTML-кода.
- Базовый шаблон (
base.html): Определяет блоки{% block content %}{% endblock %}. - Дочерний шаблон: Использует
{% extends "base.html" %}и переопределяет блоки.
Статические файлы (Static)
- Подключаются через
{% load static %}. - Настройки в
settings.py:STATIC_URL,STATICFILES_DIRS. - В продакшне используется команда
python manage.py collectstatic.