Vous pouvez également utiliser get_current_site
dans le cadre de l'application sites ( from django.contrib.sites.models import get_current_site
). Il prend un objet de requête et utilise par défaut l'objet de site que vous avez configuré à l'aide de la commande SITE_ID
dans settings.py si la requête est None
. Plus d'informations dans la documentation pour utiliser le cadre des sites
par exemple
from django.contrib.sites.shortcuts import get_current_site
request = None
full_url = ''.join(['http://', get_current_site(request).domain, obj.get_absolute_url()])
Il n'est pas aussi compact/naturel que le request.build_absolute_url()
mais il est utilisable lorsque les objets de requête ne sont pas disponibles et que vous disposez d'une URL de site par défaut.
13 votes
Pour l'anecdote : Le module sites ne consulte la base de données que la première fois qu'il a besoin du nom du site, le résultat est mis en cache dans une variable de module (SITE_CACHE) qui restera en place jusqu'à la recompilation du module ou jusqu'à ce que la méthode SiteManager.clear_cache() soit appelée. Voir : code.djangoproject.com/svn/django/tags/releases/1.3/django/