206 votes

Comment puis-je obtenir le nom de domaine de mon site dans un modèle Django ?

Comment obtenir le nom de domaine de mon site actuel à partir d'un modèle Django ? J'ai essayé de regarder dans la balise et les filtres mais rien n'y fait.

1voto

typonaut Points 151

Comme indiqué dans la réponse de @furins, il peut y avoir des problèmes avec les serveurs proxy. J'ai moi-même constaté ce problème en utilisant Apache et uWSGI. request.get_host o request.build_absolute_uri renverrait l'hôte du proxy (127.0.0.1:9191 ).

Cependant, quelqu'un a posté un guide utile pour résoudre ce problème :

https://ubuntu.com/blog/django-behind-a-proxy-fixing-absolute-urls

Bien que cette réponse soit relativement ancienne, elle est toujours pertinente pour django 3.2 et python 3.9.

Au cas où la réponse disparaîtrait à l'avenir, voici l'essentiel de la réponse :

paramètres.py

# Setup support for proxy headers
USE_X_FORWARDED_HOST = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

apache.conf

<VirtualHost *:443>
    ...
    RequestHeader set X-Forwarded-Proto 'https' env=HTTPS

    ProxyPass / http://10.0.0.3/
    ProxyPassReverse / http://10.0.0.3/
    ...
</VirtualHost>

Avec ces paramètres request.get_host y request.build_absolute_uri font référence à l'hôte demandé par le client et non à l'hôte du proxy.

0voto

Muneeb Ahmad Points 182
from django.contrib.sites.models import Site
if Site._meta.installed:
    site = Site.objects.get_current()
else:
    site = RequestSite(request)

-6voto

Erwan Points 122

Vous pouvez utiliser {{ protocol }}://{{ domain }} dans vos modèles pour obtenir votre nom de domaine.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X