🎉 Welcome to Day 5 of Django Journey!
Today, we break down the architecture that powers Django apps — the MVT pattern — and compare it to the classic MVC. If you've heard about Models, Views, Templates, and got confused, you're not alone! Let’s untangle that web. 🕸️
🧠 MVC vs MVT — What’s the Difference?
Before diving into Django specifics, let’s explore what these patterns mean.
🧩 MVC (Model-View-Controller)
This pattern separates your application into:
- Model – The data and database layer.
- View – The UI or frontend display.
- Controller – The logic that controls data flow between the Model and View.
Used in frameworks like Laravel, Ruby on Rails, and ASP.NET.
🧩 MVT (Model-View-Template) in Django
Django follows MVT, which looks very similar:
- Model – Represents data (just like MVC).
- View – Handles logic and pulls data from the model.
- Template – The HTML interface shown to users.
But here's the twist:
In Django, the View is like the Controller in MVC, and the Template acts as the View.
📘 Learn more: Django vs MVC on Real Python
🏗️ Let’s Understand Each MVT Component
🔹 1. Model – Your Data's Structure
The Model defines how data is stored in the database using Django’s ORM (Object Relational Mapping). It avoids writing raw SQL.
Example:
class BlogPost(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
`
- Models map directly to database tables.
- Each class = 1 table, each field = 1 column.
🔹 2. View – The Brain 🧠
The View is the middleman. It receives user requests, talks to the model, then selects the template to display.
Example:
python
def home(request):
posts = BlogPost.objects.all()
return render(request, 'home.html', {'posts': posts})
- Think of Views as your app’s logic and decision maker.
- It returns a response, usually HTML.
🔹 3. Template – The Frontend
Templates are what users see — HTML files with dynamic placeholders.
Example:
html
{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>{{ post.content|truncatewords:20 }}</p>
{% endfor %}
- Templates use Django Template Language (DTL).
- They display data passed by the view.
🔹 Bonus: URL Routing
Django uses a URL dispatcher to connect browser paths to views.
Example:
python
path('', views.home, name='home')
🧭 The Flow of Data (Visual Recap)
plaintext
Browser Request
↓
URLConf (urls.py)
↓
View (views.py)
↓
Model (if needed)
↓
Template (HTML page)
↓
Browser Response
🔐 Admin Panel – MVT in Action
Register a model and get a full-featured admin UI to create, read, update, and delete records!
python
admin.site.register(BlogPost)
Then visit 127.0.0.1:8000/admin
after running:
bash
python manage.py createsuperuser
Top comments (0)