Ответ
MVT (Model-View-Template) — это архитектурный паттерн, который Django использует для организации кода. Он является вариацией классического паттерна MVC (Model-View-Controller).
Основная идея — разделение ответственности (Separation of Concerns) между компонентами приложения:
- Model: Уровень данных. Отвечает за структуру данных, их валидацию и взаимодействие с базой данных через Django ORM. Модели ничего не знают о том, как их данные будут отображаться.
- View: Уровень логики. Обрабатывает HTTP-запрос, взаимодействует с моделями для получения или изменения данных и передает эти данные в шаблон для отображения. В MVT
View
выполняет роль, схожую сController
в MVC. - Template: Уровень представления. Отвечает за отображение данных в формате HTML. Использует Django Template Language (DTL) для вставки данных и выполнения простой логики отображения.
Пример простого цикла запрос-ответ:
- Пользователь запрашивает URL.
- Django через
urls.py
находит соответствующую View. - View обращается к Model для получения данных из БД.
- View передает полученные данные в Template.
- Template генерирует HTML-страницу, которая отправляется пользователю.
# models.py (Model)
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
# views.py (View)
from django.shortcuts import render
from .models import Article
def article_list(request):
articles = Article.objects.all()
# View связывает модель Article с шаблоном article_list.html
return render(request, 'blog/article_list.html', {'articles': articles})
# templates/blog/article_list.html (Template)
'''
<!DOCTYPE html>
<html>
<head>
<title>Статьи</title>
</head>
<body>
<h1>Список статей</h1>
{% for article in articles %}
<article>
<h2>{{ article.title }}</h2>
<p>{{ article.content|truncatewords:30 }}</p>
</article>
{% endfor %}
</body>
</html>
'''