Ich schreibe eine Django-Anwendung mit einer URL wie 'http: // localhost/entity/id /? Overlay = andere_id'. Dabei ist id der Primärschlüssel der bestimmten Entität, und Overlay ist ein optionaler Abfrageparameter für eine zweite Entität, die in der Anzeige überlagert werden soll. Der Benutzer kann eine Entität immer nur aktualisieren, wenn er Objekte über ein Overlay anzeigt. Beim POSTing nach/update/id möchte ich zurück zu/entity/id umleiten, aber ich möchte meinen Abfrageparameter während der Weiterleitung nicht verlieren, da die Änderung in der Ansicht störend wäre.Django Redirect mit reverse() zu einer URL, die auf Abfragezeichenfolgen
Zum Beispiel habe ich in meinem url.py folgende bekam:
...
(r'^update/(?P<id>.+)/(?P<overlay_id>.+)/$', 'update'),
(r'^entity/(?P<id>.+)/$', 'view'),
...
Da overlay_id ist erforderlich, wenn die Aktualisierung, es ist Teil der URL ist, kein Abfrageparameter. In der Django-Ansicht möchte ich nach einem erfolgreichen POST umleiten und reverse() verwenden, um zu vermeiden, dass URLs in meinem Python-Code referenziert werden. Die allgemeine Idee ist:
return HttpResponseRedirect(
reverse('views.view',
kwargs={
'id': id,
},
)
)
Aber wie übergebe ich meine Abfrageparameter umgekehrt?
Danke, Craig
Ja, das habe ich beim Zähneputzen vor einer Sekunde bemerkt. Manchmal wünschte ich, Python hätte Typensignaturen, da dies offensichtlich gewesen wäre, wenn reverse() deklariert wurde, um eine Zeichenkette zurückzugeben. Vielen Dank. –
Normalerweise bekomme ich diese ah ha Momente in der Dusche am nächsten Morgen. Sie könnten feststellen, dass pdb (oder ipdb) in Fällen hilft, in denen Sie nach Typ-Signaturen suchen. Versuchen Sie, 'import pdb zu werfen; pdb.set_trace() 'in Ihren Code einige Zeit. http://docs.python.org/library/pdb.html – istruble