vault backup: 2026-05-30 19:03:22
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
---
|
||||
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)
|
||||
```python
|
||||
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:**
|
||||
```python
|
||||
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`.
|
||||
Reference in New Issue
Block a user