Wahrscheinlich einfache Frage und ich vermisse nur etwas, aber ich bin stecken aus Ideen.Django Cross-Site-Reverse-URLs
Ich habe Django Projekt mehrere Standorte mit unterschiedlichen sessions.py
und völlig anderen ROOT_URLCONF
s. 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 nutzen die gleiche Benutzerbasis 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, ich habe viele {% url %}
Tags in meinen Vorlagen, und sie funktionieren nicht, wenn Vorlage auf anderen Websites verwendet wird. Und ich möchte vermeiden, URLs so hart wie möglich zu codieren.
Zum Beispiel vor Ort A (a.example.org) Ich habe einen
url('^users/$', 'example.accounts.list_users', name='list_users'),
Eintrag in A die URLconf. Dann, in einigen global_menu.html
Vorlage habe ich {% url list_users %}
und offensichtlich funktioniert es perfekt, was zu "/users/
".
Jetzt gibt es Platz B (b.example.org), viele Einbauten mit A. teilen, um gemeinsame Look-and-Feel ich die gleiche global_menu.html
vor Ort B verwenden möchten, und wollen {% url list_users %}
ausgeben "http://a.example.org/users/
". Wie kann ich das am besten erreichen?
Derzeit verwende ich separate global_menu.html
für jede Website, aber das verletzt DRY-Prinzip, und nicht wirklich praktisch. Und, ja, ich benutze Djangos contrib.sites
Framework mit verschiedenen SITE_ID
s definiert in für jeden Standort, aber noch nicht tatsächlich tatsächlich woanders.
aktualisieren: Zur Zeit von Ich denke url
Tag oder Affe-Patchen reverse()
Neuimplementierung, das Original zu nennen, und auf Ausnahmen in einiger „fremden URI-Liste“ nachschlagen zusätzliche auszuführen. Wenn es so etwas schon gibt, würde ich mich freuen zu hören.
Vielen Dank im Voraus für Antworten!
(1) ist bereits getan. (2) ist eine nette Funktion, danke für das Hervorheben, aber hilft nicht viel für nicht existierende benannte URLs. Ich habe versucht, etwas wie 'URL (' http: \/\/a \ .example \ .com/users/', Lambda r: None, name =' list_users ') 'zu B's URLconf hinzuzufügen, aber das tut es nicht' Ich arbeite wie erwartet (gibt "/ http: ..." zurück). – drdaeman