دوره‌ها / Django / ListView و DetailView (List & Detail Views)

ListView و DetailView (List & Detail Views)

15 دقیقه Article

ListView و DetailView: نمایش داده‌ها 📋

ListView و DetailView دو تا از پرکاربردترین CBV ها هستن. ListView برای نمایش لیست و DetailView برای نمایش یک آیتم خاص استفاده میشن.

ListView: نمایش لیست

برای نمایش لیست پست‌ها:

# blog/views.py
from django.views.generic import ListView
from .models import Post

class PostListView(ListView):
    model = Post
    template_name = 'blog/post_list.html'
    context_object_name = 'posts'
    paginate_by = 10  # صفحه‌بندی
    
    def get_queryset(self):
        # فیلتر کردن پست‌ها
        return Post.objects.filter(published=True).order_by('-created_at')
ویژگی‌های ListView:
  • ✅ به طور خودکار همه اشیاء مدل رو می‌گیره
  • ✅ صفحه‌بندی خودکار با paginate_by
  • ✅ فیلتر کردن با get_queryset()
  • ✅ مرتب‌سازی با ordering

DetailView: نمایش جزئیات

# blog/views.py
from django.views.generic import DetailView
from .models import Post

class PostDetailView(DetailView):
    model = Post
    template_name = 'blog/post_detail.html'
    context_object_name = 'post'
    
    def get_object(self):
        # استفاده از slug به جای pk
        return Post.objects.get(slug=self.kwargs['slug'])

تنظیم URL

# blog/urls.py
from django.urls import path
from .views import PostListView, PostDetailView

urlpatterns = [
    path('', PostListView.as_view(), name='post_list'),
    path('<int:pk>/', PostDetailView.as_view(), name='post_detail'),
    path('<slug:slug>/', PostDetailView.as_view(), name='post_detail'),
]

اضافه کردن Context اضافی

# blog/views.py
class PostListView(ListView):
    model = Post
    
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['categories'] = Category.objects.all()
        context['recent_posts'] = Post.objects.all()[:5]
        return context
نکته: همیشه super().get_context_data(**kwargs) رو صدا بزنید تا context پیش‌فرض رو هم داشته باشید!

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

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

برای ذخیره پیشرفت وارد شوید