Wie überprüft man, ob request.GET var ist Kein?
Hey, ich bin immer in django und das ist mir immer Kopfschmerzen.
Ich versuche, einen einfachen GET-variable. URL site.com/search/?q=search-term
Meine Ansicht ist:
def search(request):
if request.method == 'GET' and 'q' in request.GET:
q = request.GET.get('q', None)
if q is not None:
results = Task.objects.filter(
Q(title__contains=q)
|
Q(description__contains=q),
)
...return...
else:
...
else:
...
Suchanfragen wie: mysite.com/search/? (ohne q) wird durch den ersten, wenn richtig.
Das problem ist, dass Abfragen wie mysite.com/search/?q=. Sie nicht erwischt werden, indem , wenn q ist nicht Ohne:
So, die kurze Antwort wäre, Wie kann ich überprüfen, q == "? (Ich habe es bereits versucht ", None, etc, ohne Erfolg.)
Kommentar zu dem Problem - Öffnen
Ein einfaches wenn q statt , falls q nicht None ist, (oder"") hat den trick. Hat jemand dafür eine Erklärung?
Im Allgemeinen müssen Sie sehr vorsichtig sein, über die Verwendung des
- operator in Python. Normalerweise will man eine Gleichheit testen (==
), nicht eine Identität-test (
). Eine Folge von nicht-null-Länge-tests True
. InformationsquelleAutor der Frage Nacho | 2010-03-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Prüfen Sie zunächst, ob die
request.GET
dict enthält einen parameter mit dem Namenq
. Du machst das schon richtig:Als Nächstes überprüfen, ob der Wert
q
ist entwederNone
oder die leere Zeichenkette. Um das zu tun, können Sie schreiben:Beachten Sie, dass es ist nicht notwendig zu schreiben
request.GET.get('q', None)
. Wir haben bereits überprüft, um sicherzustellen, dass es ist ein'q'
Schlüssel innerhalb derrequest.GET
dict, so dass wir ergreifen können Sie den Wert direkt ein. Das einzige mal, sollten Sie dieget
Methode ist, wenn du nicht sicher bist, ein dict, hat einen bestimmten Schlüssel, und wollen vermeiden, heben eine KeyError-Ausnahme aus.Allerdings gibt es eine noch bessere Lösung basiert auf den folgenden Fakten:
None
ausgewertetFalse
''
auch ausgewertetFalse
True
.So, jetzt können Sie schreiben:
Finden Sie diese Ressourcen für mehr details:
dict.get
InformationsquelleAutor der Antwort Wesley
Danke für die Klarstellung durch @Ned.
Finden Sie eine vollständige Erklärung hier.
Grundsätzlich:
InformationsquelleAutor der Antwort Nacho