Wahrscheinlich einfache Frage und ich verpasse gerade etwas, aber ich stecke aus Ideen heraus.
Ich habe ein Django-Projekt, das mehrere Sites mit unterschiedlichen sessions.py
und völlig verschiedenen ROOT_URLCONF
s bedient. Eine Website behandelt die Benutzerregistrierung, die Authentifizierung und die Profileinstellungen, eine andere Site (in einer anderen Domäne) fungiert als Dateimanager und so weiter. Websites teilen dieselbe DB, Medien und Vorlagen. Alle Websites teilen sich die gleiche Benutzerdatenbank und implementieren eine Art transparenten Single-Sign-On- / Single-Sign-Off-Mechanismus. Es ist wie eine große Site, die sich über mehrere Domains erstreckt.
Das Problem ist, dass ich viele {% url %}
-Tags in meinen Templates habe und sie nicht funktionieren, wenn Templates auf anderen Sites verwendet werden. Und ich möchte vermeiden, URLs so hart wie möglich zu codieren.
Zum Beispiel habe ich auf der Site A (a.example.org) ein
%Vor% Eintrag in A's URLconf. Dann habe ich in global_menu.html
template {% url list_users %}
und offensichtlich funktioniert es perfekt, was zu " /users/
" führt.
Nun, es gibt Seite B (b.example.org), die viele Interna mit A teilt. Um ein einheitliches Aussehen zu haben, möchte ich das gleiche global_menu.html
auf der Site B verwenden und {% url list_users %}
wollen Ausgabe " http://a.example.org/users/
". Wie kann ich das am besten erreichen?
Momentan verwende ich separate global_menu.html
für jede Site, aber dies verstößt gegen das DRY-Prinzip und ist nicht wirklich praktisch. Und, ja, ich benutze Djangos contrib.sites
-Framework mit distinct SITE_ID
s, definiert in settings.py
für jede Site, aber benutze sie noch nirgendwo sonst.
Update : Momentan denke ich daran, url
tag oder affe-patchen reverse()
neu zu implementieren, um das Original aufzurufen, und bei Ausnahmen zusätzliche Suche in einer "fremden URI-Liste" durchzuführen ". Wenn es so etwas schon gibt - ich würde mich freuen zu hören.
Vielen Dank im Voraus für die Antworten!
Ja, Sie müssten Ihr eigenes {% url %}
-Tag erstellen, das seine eigene Umkehrmethode verwendet.
Um beispielsweise spezifisch gegen die URL site_a urlconf umzukehren, könnten Sie eine Methode wie folgt verwenden:
%Vor%Ich würde vorschlagen, zwei Änderungen vorzunehmen. (1) Verschieben Sie Vorlagen in ein gemeinsames Verzeichnis (statt pro Anwendung), wenn Sie dies nicht bereits getan haben. (2) Untersuchen Sie die neu hinzugefügte Funktion Namespaces .
Mit der ersten Änderung können Sie eine gemeinsame Basisvorlage erstellen und diese selektiv für verschiedene Apps / Websites überschreiben. Die zweite könnte dazu dienen, Ihre URLs "trockener" zu machen.