我怎么能得到完整/绝对的URL(例如https://example.com/some/path)在Django没有网站模块?这太愚蠢了……我不需要查询我的数据库来抓取URL!

我想使用reverse()。


当前回答

我知道这是一个老问题。但我认为人们仍然经常遇到这种情况。

有几个库可以补充Django的默认功能。我试过一些。当反向引用绝对url时,我喜欢以下库:

https://github.com/fusionbox/django-absoluteuri

另一个我喜欢的是,因为你可以很容易地把域、协议和路径放在一起:

https://github.com/RRMoelker/django-full-url

这个库允许你在模板中简单地写你想要的东西,例如:

{{url_parts.domain}}

其他回答

django-fullurl

如果你想在Django模板中这样做,我已经发布了一个小的PyPI包Django -fullurl,让你用fullurl和fullstatic替换url和静态模板标签,就像这样:

{% load fullurl %}

Absolute URL is: {% fullurl "foo:bar" %}

Another absolute URL is: {% fullstatic "kitten.jpg" %}

这些徽章应该自动保持最新:

在视图中,当然可以使用request。build_absolute_uri代替。

Request.get_host()将为您提供域。

request.get_host()

在django中使用这个请求对象

不是绝对的url,但我正在寻找只是得到主机。如果你想在view.py中获得host,你可以这样做

def my_view(request):
   host = f"{ request.scheme }://{ request.META.get('HTTP_HOST') }"

你可以传递request reverse('view-name', request=request)或者用build_absolute_uri将reverse()包含进来request.build_absolute_uri(reverse('view-name'))