如何在Django中获取完整/绝对URL(带域名)?

馋奶兔 提交于 2020-03-03 18:31:30

如何在没有Sites模块的情况下获取 Django中的完整/绝对URL(例如https://example.com/some/path )? 那真是太傻了......我不应该查询我的数据库以获取URL!

我想用reverse()来使用它。


#1楼

你可以尝试“request.get_full_path()”


#2楼

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


#3楼

检查进来的Request.META字典。我认为它有服务器名称和服务器端口。


#4楼

根据请求使用方便的request.build_absolute_uri()方法,将相关网址传递给它,它会给你一个完整的。

默认情况下,返回request.get_full_path()的绝对URL,但您可以将相对URL作为第一个参数传递给它,以将其转换为绝对URL。


#5楼

如果您无法访问request则无法在此处的某些解决方案中使用get_current_site(request) 。 您可以使用本机Sites框架和get_absolute_url的组合。 在管理员中设置至少一个站点 ,确保您的模型具有get_absolute_url()方法,然后:

>>> from django.contrib.sites.models import Site
>>> domain = Site.objects.get_current().domain
>>> obj = MyModel.objects.get(id=3)
>>> path = obj.get_absolute_url()

>>> url = 'http://{domain}{path}'.format(domain=domain, path=path)
>>> print(url)
'http://example.com/mymodel/objects/3/'

https://docs.djangoproject.com/en/dev/ref/contrib/sites/#getting-the-current-domain-for-full-urls

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!