@mhawke hat eine großartige Antwort geschrieben, aber ich möchte noch ein wenig weitermachen.
Here is the webapp2 documentation für das Anfrageobjekt. Ich empfehle dringend, einen Blick darauf zu werfen, und auch die Webob documentation für die Anfrage, weil Webapp2 Anfragen und Antworten aus dem Webob-Framework entnommen werden (gehen Sie voran und werfen Sie einen Blick auf die Antwortdokumente, während Sie gerade dabei sind).
Eine wichtige Sache zu beachten ist, dass die GET-Daten eine multi-dict ist, die auch aus dem Webob-Framework stammt. Ein Multidict ist grundsätzlich ein Diktat, aber ein Schlüssel kann mehrere Werte haben.Hier ist ein Beispiel aus der webapp2 docs:
request = Request.blank('/test?check=a&check=b&name=Bob')
# The whole MultiDict:
# GET([('check', 'a'), ('check', 'b'), ('name', 'Bob')])
get_values = request.GET
# The last value for a key: 'b'
check_value = request.GET['check']
# All values for a key: ['a', 'b']
check_values = request.GET.getall('check')
# An iterable with all items in the MultiDict:
# [('check', 'a'), ('check', 'b'), ('name', 'Bob')]
request.GET.items()
Das Info nützlich sein, wenn Sie Kontrollkästchen am Ende mit einer Liste von Werten für einen Schlüssel, um (a „alle überprüfen, die gelten,“ auf einem Formular) .
In Ihrem Code ruft self.request.GET.get('page', 1)
den Wert für page
aus dem multidict ab und gibt 1 zurück, wenn dieser Schlüssel nicht gefunden wird. Dieselbe Logik wird für den Schlüssel items_per_page
, from
und to
angewendet: Ruft den Wert für diesen Schlüssel ab und gibt den Standardwert zurück, wenn der Schlüssel nicht gefunden wird.
Dann haben Sie diese beiden Zeilen:
page = page < 1 and 1 or page
und
items_per_page = items_per_page < 1 and 500 or items_per_page
Wie @mhawke erwähnt, ist dies eine unangenehme Art zu sagen:
if page < 1:
page = 1
if items_per_page < 1:
items_per_page = 500
In der Tat, wenn Sie erhalten eine Chance, dass Sie diesen Code ändern sollten, um besser lesbar zu sein.
Was ist 'self.request'? – Fejs
Ich bin auch auf der Suche nach der Antwort derselben Frage. @Fejs – HamidArrivy