ListView و DetailView (List & Detail Views)
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 پیشفرض رو هم داشته باشید!
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.