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
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, DetailViewfrom django.shortcuts import get_object_or_404from django.contrib.auth.mixins import LoginRequiredMixinfrom .models import Book, Categoryclass BookListView(LoginRequiredMixin, ListView):model = Booktemplate_name = 'books/book_list.html'context_object_name = 'books'paginate_by = 10def 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 contextclass BookDetailView(DetailView):model = Booktemplate_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