Probabilmente semplice domanda inversa e sto solo perdendo qualcosa, ma mi sono bloccato a corto di idee.Django cross-site URL
Ho un progetto Django che serve diversi siti con distinto sessions.py
e completamente diverso ROOT_URLCONF
s. Un sito gestisce le impostazioni di registrazione, autenticazione e profilo degli utenti, altri siti (su un altro dominio) agiscono come file manager e così via. I siti condividono lo stesso DB, i media e i modelli. Tutti i siti condividono la stessa base di utenti, implementando una sorta di meccanismo trasparente single-sign-on/single-sign-off. È proprio come un grande sito, che si estende su diversi domini.
Il problema è che ho un sacco di tag {% url %}
nei miei modelli e non funzionano quando i modelli vengono utilizzati su altri siti. E vorrei evitare il più possibile gli URL hardcoding.
Per esempio, sul sito A (a.example.org) Ho una voce
url('^users/$', 'example.accounts.list_users', name='list_users'),
in Un URLconf. Poi, in qualche global_menu.html
modello ho {% url list_users %}
e, ovviamente, funziona perfettamente, con conseguente "/users/
".
Ora, non c'è sito B (b.example.org), la condivisione di un sacco di interni con A. Per avere comuni look-and-feel voglio usare lo stesso global_menu.html
sul sito B e voglio {% url list_users %}
di uscita "http://a.example.org/users/
". Qual è il modo migliore per ottenerlo?
Attualmente, sto utilizzando il numero global_menu.html
separato per ciascun sito, ma questo viola il principio ASCIUTTO e non molto comodo. E, sì, sto utilizzando il framework di Django contrib.sites
con distinte SITE_ID
s definiti settings.py
per ogni sito, ma non ancora effettivamente usarlo in qualsiasi altro luogo.
Aggiornamento: Attualmente sto pensando di reimplementare url
tag o scimmia-patching reverse()
, chiamare quello originale, e sulle eccezioni eseguire ulteriore sguardo in qualche "lista URI straniero". Se esiste già qualcosa di simile, sarei felice di sentirlo.
Grazie in anticipo per le risposte!
(1) è già fatto. (2) è una caratteristica di fantasia, grazie per aver segnalato, ma non aiuta molto per gli URL con nome inesistenti. Ho provato ad aggiungere qualcosa come 'url ('http: \/\/a \ .example \ .com/users /', lambda r: None, name = 'list_users')' a B's URLconf, ma non lo fa lavoro come mi aspetterei (restituisce "/ http: ..."). – drdaeman