2017-07-02 4 views
0

StackOverflow, möchte ich eine vielseitige Schaufenster machen.Django. Machen Sie eine vielseitige Präsentation

Auf der ersten Seite wird es zuerst 25 Artikel, in der zweiten - von 26 bis 50 und so weiter.

Aber wie kann ich das tun?

hier ist urls.py:

products = Product.objects.order_by('-date') 
urlpatterns = [ 
url(r' regexp ', ListView.as_view(queryset=products, template_name='shop/shop.html')),] 

Es muss die Anforderungen so asnwer: mysite.com/shop/2

und auch Produkte angezeigt werden [25 * (request_number-1) : 25 * request_number] Artikel auf Seite

Vielen Dank im Voraus!

+0

Haben Sie einen Blick auf https://docs.djangoproject.com/en/1.11/topics/pagination/#using-paginator-in-a-view haben ? –

+0

@Adrien Ja, habe ich und etwas geht schief bei 'page = request.GET.get ('Seite')' – Michael

+0

@AdrienMatissart vielleicht ändern 'request.GET.get ('Shop' + Anfrage)'? Mein Link sieht so aus: site.com/shop/2 – Michael

Antwort

1

ListView kann Paginierung für Sie behandeln, wenn Sie seinen paginate_by Parameter definieren. Lassen Sie uns alle Parameter in einer neuen Klasse definieren erben von ihm:

class ProductsListView(ListView): 
    model = Product 
    ordering = '-date' 
    paginate_by = 25 
    template_name = 'shop/shop.html' 

Dann alles, was Sie brauchen, ist ein page Parameter in der URL-Muster zu definieren. Technisch funktioniert das, weil ListView erbt von MultipleObjectMixin

urlpatterns = [ 
    url(r'^shop/(?P<page>[0-9]+)/$', ProductListView.as_view()) 
] 
+0

Entschuldigung für eine andere dumme Frage, aber was muss ich tun, wenn ich meine Daten verarbeiten möchte? Ich habe eine Funktion, die [1, 2, 3, 4, 5, 6] in [[1, 2, 3, 4], [5, 6, None, None]] übersetzt, wie kann ich sie darauf anwenden? – Michael

+0

Nicht sicher zu verstehen, wie dies mit Ihrer ursprünglichen Frage zusammenhängt. Sie können jedoch die Methode 'get_queryset' in' ListView' überschreiben, um Ihre eigene Methode zum Erstellen der Liste von Objekten zu definieren, die in der Vorlage gerendert werden. –

+0

Danke nochmal, du bist der Beste! – Michael