0 Tage Serie
python / intermediate
Snippet

Django Class-Based Views mit TemplateResponse

Class-Based Views (CBVs) in Django bieten wiederverwendbare, modulare Ansichtskomponenten. ListView übernimmt automatisch die Paginierung und Template-Rendering für Objektlisten. DetailView bietet eine saubere Möglichkeit, einzelne Objekte nach Slug oder Primärschlüssel anzuzeigen. LoginRequiredMixin fügt Authentifizierungsschutz hinzu. Die get_queryset()-Methode ermöglicht dynamisches Filtern basierend auf URL-Parametern oder Query-Strings.

snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from django.views.generic import ListView, DetailView
from django.shortcuts import get_object_or_404
from django.contrib.auth.mixins import LoginRequiredMixin
from .models import Book, Category
class BookListView(LoginRequiredMixin, ListView):
model = Book
template_name = 'books/book_list.html'
context_object_name = 'books'
paginate_by = 10
def get_queryset(self):
queryset = Book.objects.filter(is_published=True)
category = self.request.GET.get('category')
if category:
queryset = queryset.filter(category__slug=category)
return queryset.order_by('-published_date')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['categories'] = Category.objects.all()
return context
class BookDetailView(DetailView):
model = Book
template_name = 'books/book_detail.html'
context_object_name = 'book'
slug_field = 'slug'
slug_url_kwarg = 'slug'
django
Erklärung
1
class BookListView(LoginRequiredMixin, ListView):
CBV, die Authentifizierungs-Mixin mit generischer ListView-Funktionalität kombiniert
2
paginate_by = 10
Django paginiert automatisch die Ergebnisse und übergibt das Seitenobjekt an das Template
3
def get_queryset(self):
Überschreiben, um anzupassen, welche Objekte abgerufen werden, mit optionaler Filterung
4
slug_field = 'slug'
DetailView verwendet das Slug-Feld, um die Book-Instanz nachzuschlagen