Почему архитектуру Django называют MVT, а не MVC

Ответ

Django использует архитектурный шаблон MVT (Model-View-Template), который является его собственной интерпретацией классического MVC (Model-View-Controller). Разница заключается в распределении обязанностей.

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

  • Model (Модель): Полностью совпадает с Model в MVC. Отвечает за структуру данных, валидацию и бизнес-логику.
  • View (Представление): В Django это аналог Controller в MVC. Функция или класс, который принимает HTTP-запрос, выполняет необходимую логику (например, получает данные из модели) и возвращает HTTP-ответ, часто используя шаблон для рендеринга.
  • Template (Шаблон): Это аналог View в MVC. Отвечает исключительно за представление данных (HTML-разметка).

Сравнительная таблица:

Обязанность Классический MVC Django (MVT)
Работа с данными Model Model
Обработка запроса Controller View
Отображение данных View Template

Пример кода:

# models.py (Model)
from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()

# views.py (View, аналог Controller)
from django.shortcuts import render
from .models import Article

def article_detail(request, article_id):
    article = Article.objects.get(pk=article_id)
    return render(request, 'articles/detail.html', {'article': article})

# articles/detail.html (Template, аналог View)
'''
<h1>{{ article.title }}</h1>
<p>{{ article.content }}</p>
'''

Таким образом, Django называет свою архитектуру MVT, чтобы подчеркнуть, что логику обработки запроса выполняет View, а за отображение отвечает Template.