Probablemente es una pregunta simple y me falta algo, pero no tengo ideas.Django URLs inversas entre sitios
Tengo el proyecto Django que sirve varios sitios con distinto sessions.py
y completamente diferente ROOT_URLCONF
s. Un sitio maneja el registro del usuario, la autenticación y la configuración del perfil, otro sitio (en otro dominio) actúa como administrador de archivos, y así sucesivamente. Los sitios comparten la misma base de datos, medios y plantillas. Todos los sitios comparten la misma base de usuarios, implementando un tipo de mecanismo transparente de inicio de sesión único/inicio de sesión único. Es como un gran sitio que abarca varios dominios.
El problema es que tengo muchas etiquetas {% url %}
en mis plantillas, y no funcionan cuando la plantilla se usa en otros sitios. Y me gustaría evitar las URL de codificación dura tanto como sea posible.
Por ejemplo, en el sitio A (a.example.org) que tienen una entrada
url('^users/$', 'example.accounts.list_users', name='list_users'),
en una de URLconf. Entonces, en alguna plantilla global_menu.html
tengo {% url list_users %}
y obviamente funciona perfectamente, lo que resulta en "/users/
".
Ahora, hay sitio B (b.example.org), que comparten una gran cantidad de elementos internos con A. Tener común look-and-feel quiero usar la misma global_menu.html
en el sitio B y quiero {% url list_users %}
a la salida "http://a.example.org/users/
". ¿Cuál es la mejor manera de lograr esto?
Actualmente, estoy usando global_menu.html
por separado para cada sitio, pero esto viola el principio DRY, y no es realmente conveniente. Y, sí, estoy usando el framework contrib.sites
de Django con distintos SITE_ID
definidos en settings.py
para cada sitio, pero que aún no lo estoy usando en ningún otro lado.
actualización: Actualmente estoy pensando en reimplementar url
etiqueta o mono-parches reverse()
, para llamar a la original, y sobre las excepciones realizan adicional mirar hacia arriba en alguna "extraña lista de URI". Si ya existe algo como esto, me gustaría escucharlo.
¡Gracias de antemano por las respuestas!
(1) ya está hecho. (2) es una función elegante, gracias por señalarlo, pero no ayuda mucho con las URL con nombres inexistentes. Intenté agregar algo como 'url ('http: \/\/a \ .example \ .com/users /', lambda r: None, name = 'list_users')' a B's URLconf, pero no funciona t trabajo como esperaba (devuelve "/ http: ..."). – drdaeman