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

我想使用reverse()。


当前回答

还有ABSOLUTE_URL_OVERRIDES可用作为设置

https://docs.djangoproject.com/en/2.1/ref/settings/#absolute-url-overrides

但这将覆盖get_absolute_url(),这可能是不可取的。

我认为更好的解决方案是把它放在models.py中,而不是仅仅为此安装sites框架,或者做一些这里提到的依赖于request对象的其他事情

在settings.py中定义BASE_URL,然后将其导入models.py并创建一个抽象类(或将其添加到您已经在使用的类中),该类定义get_truly_absolute_url()。它可以很简单:

def get_truly_absolute_url(self):
    return BASE_URL + self.get_absolute_url()

子类化它,现在你可以在任何地方使用它。

其他回答

如果你想使用reverse(),你可以这样做:request。build_absolute_uri(反向(view_name, args = (obj。pk,)))

要从模板创建到另一个页面的完整链接,您可以使用以下命令:

{{ request.META.HTTP_HOST }}{% url 'views.my_view' my_arg %}

request.META。HTTP_HOST给出主机名,url给出相对名。然后模板引擎将它们连接成一个完整的url。

还有另一种方式。您可以在view.py中使用build_absolute_uri()并将其传递给模板。

view.py

def index(request):
    baseurl = request.build_absolute_uri()
    return render_to_response('your-template.html', { 'baseurl': baseurl })

your-template.html

{{ baseurl }}

检查请求。META字典。我认为它有服务器名和服务器端口。

试试下面的代码:

{{ request.scheme }}://{{ request.META.HTTP_HOST }}