Nehmen wir an, ich habe ein URL-Muster mit Parametern, die mich mit einer Ansicht in django verbinden:
%Vor% Und sagen wir, ich habe eine thing
und eine feature
:
Jetzt gibt mir Django die großartige Möglichkeit, eine URL zu erhalten, die mich auf eine Seite bringt, die einer bestimmten Eigenschaft einer bestimmten Sache gewidmet ist. Ich kann das so machen:
%Vor%Jetzt bin ich auf eine Situation gestoßen, die ich genau ansprechen muss. Ich bin nicht auf der Suche nach einem Workaround - ich suche das folgende Problem zu lösen:
Wie bekomme ich die name
einer URL, wie bekomme ich die Liste der kwarg
Argumentnamen, die benötigt werden, um diese URL umzukehren?
Ich suche nach der Funktion get_kwarg_names_for_url
. Es verhält sich so:
url_kwarg_names
ist jetzt die Liste jedes Schlüsselworts, das ich an Djangos reverse
-Funktion liefern muss, um die URL namens "thing_feature"
umzukehren.
Jede Hilfe ist willkommen!
Gestützt auf die Antwort von knbk konnte ich folgende Lösung finden:
%Vor%Ich fange mit einer fairen Warnung an: Dies ist mit der öffentlichen API nicht möglich. Darüber hinaus arbeite ich aktiv daran, den URL-Dispatcher für 1.10 neu zu schreiben, so dass diese Methode wahrscheinlich zu diesem Zeitpunkt durchbrechen wird.
Zuerst müssen Sie das richtige RegexURLResolver
bekommen. Wenn sich die Ansicht nicht in einem Namespace befindet, können Sie reverse_dict
verwenden, um eine Liste von Möglichkeiten zu erhalten, und die Kwarts extrahieren:
Da ein Ansichtsname mehrere Muster mit unterschiedlichen Kwargs haben kann (obwohl Sie dies für Ihre eigene Gesundheit vermeiden möchten), wird eine Liste aller möglichen Kwargs zurückgegeben. Normalerweise wären die verschiedenen Sätze die erforderlichen Kwargs auf der einen Seite und erforderten + optionale Kwargs auf der anderen Seite.
Ich habe das nicht getestet, aber wenn es nicht funktioniert, können Sie in resolver.reverse_dict
ein bisschen herumgrölen, um die genauen Einzelheiten herauszufinden. Es wurde nicht genau auf Benutzerfreundlichkeit ausgelegt.
Sie sollten dies mit einem resolve()
Aus den Dokumenten:
Ein ResolverMatch-Objekt kann dann abgefragt werden, um Informationen über das URL-Muster bereitzustellen, das mit einer URL übereinstimmt:
func, args, kwargs = resolve('/some/path/')
Spezifisch für Ihren Beispielcode:
%Vor%Tags und Links python django django-urls