2010-11-04 20 views

Répondre

53

En général, je mis quelque chose comme ça dans settings.py:

import socket 

try: 
    HOSTNAME = socket.gethostname() 
except: 
    HOSTNAME = 'localhost' 
+7

Votre solution ne fonctionne pas, si vous utilisez Docker. Il montrera l'ID du conteneur au lieu de l'URL. –

+134

Ma solution a été écrite avant l'existence de Docker. Pardon. –

+2

La solution correcte semble être 'request.get_host()' – Dorian

4

Avez-vous essayé os.environ.get('HOSTNAME')?

57

Si vous avez une demande (par exemple, c'est à l'intérieur d'une vue), vous pouvez regarder request.get_host() que vous obtient un LOCNAME complet (hôte et le port), en tenant compte des en-têtes de proxy inverse le cas échéant. Si vous n'avez pas de demande, vous devez configurer le nom d'hôte quelque part dans vos paramètres. Le simple fait de regarder le nom d'hôte du système peut être ambigu dans beaucoup de cas, les hôtes virtuels étant les plus courants.

3

Ajoutez simplement à @Tobu's answer. Si vous avez un objet de requête, et que vous souhaitez connaître le protocole (à savoir http/https), vous pouvez faire:

if request.is_secure(): 
    protocol = 'https' 
else: 
    protocol = 'http' 

Parce que is_secure() retours True si la demande a été faite avec le protocole HTTPS.

+6

Vous ne pourriez pas utiliser [request.scheme] (https://docs.djangoproject.com/en/dev/ref/request-response/#django.http .HttpRequest.scheme)? –

+2

@RyneEverett merci. Je ne le savais pas (facepalm). – azalea