Что такое архитектурный паттерн MVT в Django?

Ответ

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) для вставки данных и выполнения простой логики отображения.

Пример простого цикла запрос-ответ:

  1. Пользователь запрашивает URL.
  2. Django через urls.py находит соответствующую View.
  3. View обращается к Model для получения данных из БД.
  4. View передает полученные данные в Template.
  5. 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>
'''