2010-11-04 12 views

risposta

53

io generalmente messo qualcosa di simile in settings.py:

import socket 

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

La tua soluzione non funziona se usi Docker. Mostrerà l'ID del contenitore invece dell'URL. –

+134

La mia soluzione è stata scritta prima che il Docker esistesse. Scusate. –

+2

La soluzione corretta sembra essere 'request.get_host()' – Dorian

4

Hai provato os.environ.get('HOSTNAME')?

57

Se si dispone di una richiesta (ad esempio, questo è all'interno di una vista), si può guardare a request.get_host() cui si ottiene un LOCNAME completa (host e la porta), tenendo conto delle eventuali intestazioni proxy inverse. Se non hai una richiesta, dovresti configurare il nome host da qualche parte nelle tue impostazioni. Solo guardando il nome host del sistema può essere ambiguo in molti casi, gli host virtuali sono i più comuni.

3

Basta aggiungere a @Tobu's answer. Se si dispone di un oggetto di richiesta, e si vorrebbe sapere il protocollo (vale a dire http/https), si può fare:

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

Perché is_secure() rendimenti True se richiesta è stata fatta con HTTPS.

+6

Non potresti semplicemente usare [request.scheme] (https://docs.djangoproject.com/en/dev/ref/request-response/#django.http .HttpRequest.scheme)? –

+2

@RyneEverett grazie. non lo sapevo (facepalm). – azalea

Problemi correlati