如何使用Django获取主机服务器的名称?

use*_*652 48 python django url host

如何使用Django获取主机服务器的名称?

我需要托管服务器的名称而不是客户端名称?

Cra*_*der 74

我通常把这样的东西放在settings.py:

import socket

try:
    HOSTNAME = socket.gethostname()
except:
    HOSTNAME = 'localhost'
Run Code Online (Sandbox Code Playgroud)

  • 他的解决方案是在 docker 出现之前编写的。对不起。 (47认同)
  • 有人删除了我2016年11月22日的评论,其措辞如下:我的解决方案是在Docker存在之前编写的。对不起。 (34认同)
  • 如果您使用Docker,则您的解决方案不起作用.它将显示容器ID而不是URL. (10认同)
  • @antony.trupe 来自模因? (6认同)
  • 必须链接到这里 https://www.reddit.com/r/ProgrammerHumor/comments/jmnr07/that_is_a_good_excuse/ (2认同)

Tob*_*obu 72

如果您有请求(例如,这是在视图中),您可以查看request.get_host()哪个获取完整的位置名称(主机和端口),并考虑反向代理标头(如果有).如果您没有请求,则应在设置中的某处配置主机名.在很多情况下,查看系统主机名可能不明确,虚拟主机是最常见的.


Sof*_*enM 10

如果您需要获取http(s)://hostname/可以使用以下内容:

request.build_absolute_uri('/')

这里列出了所有有用的方法


Ank*_*wal 7

尝试 os.environ.get('HOSTNAME')


aza*_*lea 7

只需添加@ Tobu的答案.如果你有一个请求对象,并且你想知道协议(即http/https),你可以使用request.scheme(由@ RyneEverett的评论建议).

或者,您可以(下面的原始答案):

if request.is_secure():
    protocol = 'https'
else:
    protocol = 'http'
Run Code Online (Sandbox Code Playgroud)

因为如果使用HTTPS发出请求,则返回is_secure()True.

  • 难道你不能只使用[request.scheme](https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.scheme)? (11认同)
  • @RyneEverett谢谢.我不知道(facepalm). (3认同)