2010-11-04 84 views

回答

53

我一般放在settings.py是這樣的:

import socket 

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

如果您使用Docker,則您的解決方案不起作用。它將顯示容器ID而不是URL。 – 2016-11-18 09:57:42

+134

我的解決方案是在Docker存在之前編寫的。抱歉。 – 2016-11-22 08:03:30

+2

正確的解決方案似乎是'request.get_host()' – Dorian 2017-02-14 05:14:23

4

你試過os.environ.get('HOSTNAME')

57

如果您有一個請求(例如,這是一個視圖中),你可以看看request.get_host()它讓你一個完整的LOCNAME(主機和端口),考慮到反向代理標頭(如果有的話)。如果您沒有請求,則應該在設置中的某處配置主機名。在很多情況下,查看系統主機名可能不明確,虛擬主機是最常見的。

3

只需添加到@Tobu's answer即可。 如果您有一個請求對象,你想知道的協議(即HTTP/HTTPS),你可以這樣做:

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

因爲is_secure()回報True如果請求被HTTPS建立。

+6

難道你不能只使用[request.scheme](https://docs.djangoproject.com/en/dev/ref/request-response/#django.http .HttpRequest.scheme)? – 2015-07-21 20:28:09

+2

@RyneEverett謝謝。不知道(facepalm)。 – azalea 2015-07-21 20:43:00

相關問題