2010-11-04 60 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

相关问题