Django und eckige URL-Muster
Frage
Manchmal übergebe ich in meinem Code Get-Parameter mit URLs.Ein bestimmtes Szenario besteht darin, dass der Benutzer sich zuerst anmelden muss, wenn er nicht angemeldet ist, aber eine URL für eine Seite eingibt, die eine Anmeldung erfordert.
In diesem Fall habe ich möglicherweise eine URL wie: www.example.com/home/#/main/
.
Das Ende der URL /#/main/
ist für eckig.Allerdings in Django, wenn ich das Folgende mache, um das zu bekommen next
Parameter oben, ich mache das:
self.request.GET.get('next', self.redirect_url)
Das Problem besteht darin, dass in diesem Fall next
liefert alles außer dem Winkelteil, also erhalte ich: www.example.com/home/
.
Gibt es überhaupt eine Möglichkeit, auch den restlichen Teil der URL abzurufen?
Lösung
Sie müssen die URL urlencodieren, bevor Sie sie als Parameter hinzufügen.Dann wird daraus %23 und nicht mehr das Trennzeichen für den Anker, was clientseitig nur wie von KVISH beschrieben gehandhabt wird.
Andere Tipps
Anscheinend kannst du das nicht.Django sieht nicht einmal den Anker, alles wird vom Client (Browser) verwaltet.
Wie identifiziere ich einen Anker in einer URL in Django?
Um dies zu umgehen, verwende ich jQuery, um ein verstecktes Eingabefeld auf den Hash-Speicherort festzulegen, den ich wie folgt erhalten kann:
window.location.hash
Der Hash wird mit dem Formular übermittelt und ich kann ihn von dort übernehmen.