Development #8764
Exposer le tenant dans les templates
0%
Description
Suite au #8686, puisque qu'on se base sur le tenant pour obtenir le base_url c'est peut-être utile d'avoir celui-ci dans les templates, à discuter parce que ça rend le template difficilement testable en mode non-multitenant. On pourrait sinon exposer seulement base_url est avoir un solution de repli en mode monotenant, i.e. utiliser le request stocké globalement et/ou toujours renvoyer http://localhost:8000
.
Historique
Mis à jour par Thomas Noël il y a plus de 8 ans
Tu aurais un exemple où ça serait utile d'avoir le tenant dans le contexte ? (c'est ça, ou je n'ai pas compris ?)
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
Un seul mais important: les mails qui contiennent des liens; coté authentic par exemple on a le système d'enregistrement qui ne marche qu'initier depuis une requête, impossible d'en faire une commande shell; impossible non plus de faire des tâches de fond qui enverraient des mails (votre compte va être désactivé, voici les comptes à modérer, etc..). Je ne sais pas ce qui envoie les mails pour les encombrants montpellier mais si c'est dans passerelle je suppose que le domaine des liens est en dur ou qu'il n'y en a pas.
Ça a été contourné dans diverses applications (docbow, polynum, site logement) en ajoutant un BASE_URL explicite dans les settings.
Mis à jour par Thomas Noël il y a plus de 8 ans
Benjamin Dauvergne a écrit :
Un seul mais important: les mails qui contiennent des liens;
Of course, j'avais complétement zappé ça.
Et ça pourrait peut-être rester le principe ?Ça a été contourné dans diverses applications (docbow, polynum, site logement) en ajoutant un BASE_URL explicite dans les settings.
- dans hobo, un TenantSettings qui ajoute des choses du tenant dans les settings
- dans le logiciel cible, on ajoute dans context quelque chose comme
base_url = getattr(settings, 'BASE_URL', None) or request.get_host()
Mmmh ?
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
Et ça pourrait peut-être rester le principe ?
- dans hobo, un TenantSettings qui ajoute des choses du tenant dans les settings
- dans le logiciel cible, on ajoute dans context quelque chose comme
base_url = getattr(settings, 'BASE_URL', None) or request.get_host()
Et le principe DRY ? On est assuré d'avoir ce qu'il faut si un tenant
est présent, on pourrait viser cela, marche en multitenant et en
mono-tenant il faut penser à poser BASE_URL.
from django.conf import settings from django.db import connection from hobo.middleware.utils import StoreRequestMiddleware from django.template import Library register = Library() @register.simple_tag(takes_context=True) def base_url(context): request = context.get('request') if not request: request = StoreRequestMiddleware.get_request() if request: url = request.build_absolute_uri('') if hasattr(settings, 'BASE_URL'): url = settings.BASE_URL elif hasattr(connection, 'tenant') and hasattr(connection.tenant, 'get_base_url'): url = connection.tenant.get_base_url() else: assert True, 'No way to build a base URL' url = url.rstrip('/') return url
à utiliser
{% base_url %}{% url 'coincoin' %}
Mis à jour par Frédéric Péters il y a plus de 8 ans
Pour info combo pose déjà l'URL racine du site dans site_base (et c'est utilisé extensivement dans publik-base-theme); ça m'arrangerait qu'on n'ait pas à changer ça.
Mis à jour par Frédéric Péters il y a 9 mois
- Statut changé de Nouveau à Fermé
- Planning mis à Non
Pour info combo pose déjà l'URL racine du site dans site_base (et c'est utilisé extensivement dans publik-base-theme); ça m'arrangerait qu'on n'ait pas à changer ça.
On vit très bien avec ça.