如何在没有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
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3186762