Wie bekomme ich current_app für die Verwendung mit Reverse in einer mehrfach implementierbaren wiederverwendbaren Django-Anwendung?

8

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

    
Nike 08.01.2010, 19:44
quelle

3 Antworten

10

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:

%Vor%

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:

%Vor%

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%     
stefanfoulis 06.11.2012 10:28
quelle
1

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.

%Vor%

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.

    
Will Hardy 08.01.2010 22:21
quelle
-4

Ich glaube, dass dies das sites Framework ist.

    
Hank Gay 08.01.2010 19:46
quelle

Tags und Links