نمایش داده‌ها در تمپلیت


پس از تعریف مدل‌ها و ایجاد روابط بین آن‌ها — مانند ForeignKey، OneToOneField یا ManyToManyField — نوبت به نمایش داده‌ها در رابط کاربری می‌رسد. این مرحله در الگوی CRUD با عنوان عملیات Read شناخته می‌شود، چرا که هدف آن بازیابی و نمایش اطلاعات ذخیره‌شده در پایگاه‌داده است. در Django، این فرآیند معمولاً با ترکیب QuerySetها برای استخراج داده و Viewها برای ارسال آن‌ها به تمپلیت‌ها پیاده‌سازی می‌شود.

اصطلاح CRUD مخفف چهار عملیات پایه‌ای «ایجاد» (Create)، «خواندن» (Read)، «به‌روزرسانی» (Update) و «حذف» (Delete) است و هستهٔ اصلی تعامل هر سامانهٔ نرم‌افزاری با داده‌ها محسوب می‌شود. این چهار عملیات چارچوبی استاندارد برای مدیریت چرخهٔ حیات داده‌ها در پایگاه‌های اطلاعاتی فراهم می‌کنند و در تقریباً تمام اپلیکیشن‌های تعاملی — از سیستم‌های مدیریت محتوا گرفته تا شبکه‌های اجتماعی — به‌کار گرفته می‌شوند. هر بار که کاربری داده‌ای را وارد می‌کند، آن را مشاهده می‌کند، ویرایش می‌کند یا پاک می‌کند، در واقع یکی از عملیات CRUD را اجرا کرده است.

در این میان، عملیات Read نقشی محوری دارد: هدف آن دریافت داده‌های ذخیره‌شده در مدل‌ها و نمایش آن‌ها در قالب‌های HTML برای کاربر نهایی است. بخش «ارسال داده‌ها به تمپلیت» در واقع قلب تپندهٔ عملیات Read محسوب می‌شود؛ چرا که بدون این مرحله، حتی اگر داده‌ها با موفقیت از دیتابیس بازیابی شوند، کاربر هرگز آن‌ها را مشاهده نخواهد کرد.

برای پیاده‌سازی این فرآیند، ابتدا باید داده‌های مدل — از جمله روابط معکوس (reverse relationships) — را در View بازیابی کرد. سپس این داده‌ها را در قالب یک دیکشنری (context) به تمپلیت ارسال نمود. در نهایت، در خود تمپلیت، با بهره‌گیری ازقابلیت‌های زبان تمپلیت جنگو — شامل متغیرها (Variables)، فیلترها (Filters) و تگ‌های تمپلیت (Template Tags) — داده‌ها به‌صورت مناسب نمایش داده می‌شوند.

 

در اینجا قصد داریم لیست تمام پروژه‌های تعریف‌شده در مدل Project را در مسیر /projects/ نمایش دهیم، به‌طوری که با کلیک روی هر پروژه، کاربر به صفحه جزئیات آن (در مسیر /read-project/) هدایت شود.

 

جمع‌آوری داده‌ها در View


ابتدا در فایل views.py، یک تابع برای بازیابی تمام رکوردهای مدل Project و ارسال آن‌ها به تمپلیت تعریف می‌کنیم

coreapp/views.py

from . import models

def Projects(request):
  projectObjs = models.Project.objects.all()
  context = {'projects':projectObjs}
  return render(request, 'projects.html', context)

 

تعریف الگوی URL


پس از ایجاد تابع view، نیاز است مسیر مربوطه را در فایل urls.py ثبت کنیم

coreapp/urls.py

urlpatterns = [
    ... ,
    path('projects/', views.Projects, name='Projects'),
    ... ,
]

 

نمایش داده‌ها در تمپلیت


در نهایت، در فایل تمپلیت projects.html، لیستی از عناوین پروژه‌ها را با استفاده از حلقهٔ {% for %} نمایش می‌دهیم

coreapp/templates/projects.html

{% extends 'base.html' %}
{% block title %} {{ block.super}} | Projects {% endblock %}
{% block content %}
  <h1>Projects List</h1>
  <ul>
    {% for project in projects %}
    <li> {{ project.title }} </li>
    {% empty %}
      <li>No Project Found</li>
    {% endfor %}
  </ul>
{% endblock %}
💡 استفاده از تگ {% empty %} در حلقه‌ها، روشی تمیز برای نمایش پیام جایگزین در صورت عدم وجود داده است.
 

این پیاده‌سازی، نمونه‌ای کلاسیک از عملیات Read در الگوی CRUD است. داده‌ها از دیتابیس خوانده شده، به تمپلیت ارسال می‌شوند و به‌صورت کاربرپسند نمایش داده می‌شوند — همان‌گونه که کاربران انتظار دارند.