Ich schreibe wiederverwendbare App. Und ich möchte es mehrmals bereitstellen.
Hier ist urls.py:
%Vor%und Fotos / urls.py:
%Vor%In der album_list-Ansicht möchte ich die URL zum Erstellen des neuen Albums album_page anzeigen.
Ich habe festgestellt, dass ich den Parameter current_app der Umkehrfunktion verwenden muss, um die richtige URL zu erhalten.
Aber wie bekomme ich diese current_app? Ich dachte, die Antwort ist etwas Einfaches. Aber ich kann es in der Django-Dokumentation nicht finden.
Danke, Nick
Ich weiß, das ist eine ziemlich alte Frage ... aber ich denke, ich habe eine Lösung gefunden:
Wie Will Hardy vorgeschlagen hat, müssen Sie app_name
für beide Instanzen gleich halten (oder gar nicht definieren, es wird standardmäßig auf die App gesetzt, in der sich die enthaltenen URLs befinden). Definieren Sie jedoch einen separaten Namespace für jede Anwendungsinstanz:
Jetzt kommt der etwas knifflige Teil der Einstellung der aktuell aktiven App-Instanz (Namespace) in Ihren Ansichten. Das heißt, Sie müssen herausfinden, welche App-Instanz aktiv ist und diese an RequestContext
übergeben.
Um die aktuell aktive App zu finden, kann django.core.urlresolvers.resolve
verwendet werden:
Sie müssen also Ihre Ansichten entsprechend aktualisieren (dies setzt die Verwendung der klassenbasierten Ansichten voraus):
%Vor%Jetzt wird das URL-Tag automatisch in den korrekten Namespace zurückversetzt und ermöglicht bei Bedarf weiterhin die Rückkehr zu einem bestimmten App-Namespace:
%Vor%Um URLs in Ansichten umzukehren, muss die aktuelle App-Instanz manuell übergeben werden:
%Vor% In deinen URLs hast du ein anderes app_name
, obwohl es dieselbe App ist. Setzen Sie app_name
auf dasselbe und setzen Sie namespace
für jede Instanz eindeutig. zB.
Geben Sie dann das current_app
-Argument bei der Verwendung von reverse an. Siehe Ссылка und Ссылка
[Bearbeiten] nach erneutem Lesen der Frage:
Sie müssen das current_app
Argument nicht angeben, wenn Sie das {% url %}
-Tag verwenden. Soweit ich zu der Annahme verleitet habe, wird automatisch auf eine Template-Variable namens current_app
zugegriffen, die automatisch basierend auf der übereinstimmenden URL gesetzt wird.
Tags und Links python django django-urls