دوره‌ها / Django / آماده‌سازی تمپلیت (Prep Template & View)

آماده‌سازی تمپلیت (Prep Template & View)

35 دقیقه Article

آماده‌سازی تمپلیت و ویو: اولین صفحه واقعی 🎬

حالا وقتشه که اولین صفحه واقعی سایت رو بسازیم! این صفحه داده‌ها رو از دیتابیس می‌گیره و در تمپلیت نمایش میده.

مراحل ساخت یک صفحه کامل

  1. ساخت ویو: داده‌ها رو از دیتابیس بگیرید
  2. ساخت تمپلیت: داده‌ها رو در HTML نمایش بدید
  3. تنظیم URL: ویو رو به یک آدرس متصل کنید

ساخت ویو با داده‌های واقعی

# blog/views.py
from django.shortcuts import render
from .models import Post

def home(request):
    posts = Post.objects.filter(published=True)[:5]
    context = {
        'posts': posts,
        'title': 'صفحه اصلی'
    }
    return render(request, 'blog/home.html', context)

ساخت تمپلیت

حالا تمپلیت رو می‌سازیم:


آخرین پست‌ها

{% for post in posts %}

{{ post.title }}

{{ post.content|truncatewords:50 }}

نویسنده: {{ post.author.username }} | تاریخ: {{ post.created_at|date:"Y/m/d" }}
{% empty %}

هنوز پستی منتشر نشده است.

{% endfor %}
نکته: همیشه از تگ empty در حلقه‌های for استفاده کنید تا اگر لیست خالی بود، پیام مناسبی نمایش داده بشه.

🎯 تمرین عملی:

یک ویو و تمپلیت برای نمایش لیست دسته‌بندی‌ها بسازید. هر دسته‌بندی باید نام و تعداد پست‌های اون نمایش داده بشه.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

تمرین: ساخت ویو و تمپلیت کامل Medium
سوال تمرین

🎯 تمرین عملی: صفحه لیست دسته‌بندی‌ها

یک ویو و تمپلیت برای نمایش لیست دسته‌بندی‌ها بسازید:

  1. ویوی category_list رو بنویسید که تمام دسته‌بندی‌ها رو بگیره
  2. برای هر دسته‌بندی، تعداد پست‌های اون رو محاسبه کنید
  3. تمپلیت رو بسازید که لیست رو به صورت زیبا نمایش بده
پاسخ تمرین
PYTHON
from django.shortcuts import render
from django.db.models import Count
from .models import Category, Post

def category_list(request):
    # گرفتن دسته‌بندی‌ها با تعداد پست‌ها
    categories = Category.objects.annotate(
        post_count=Count('post')
    ).order_by('-post_count')
    
    context = {
        'categories': categories
    }
    return render(request, 'blog/category_list.html', context)

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.