我怎么能得到完整/绝对的URL(例如https://example.com/some/path)在Django没有网站模块?这太愚蠢了……我不需要查询我的数据库来抓取URL!
我想使用reverse()。
我怎么能得到完整/绝对的URL(例如https://example.com/some/path)在Django没有网站模块?这太愚蠢了……我不需要查询我的数据库来抓取URL!
我想使用reverse()。
当前回答
你可以传递request reverse('view-name', request=request)或者用build_absolute_uri将reverse()包含进来request.build_absolute_uri(reverse('view-name'))
其他回答
你可以试试"request.get_full_path()"
如果你不能访问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
还有另一种方式。您可以在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 }}
request.get_host()
在django中使用这个请求对象
在做一个项目的时候,我学会了在Django中获取完整/绝对的URL。
如果你的URL在地址栏中是这样的:
https://stackoverflow.com/questions/2345708
如果你想把上面的URL显示给你的模板。
{{请求。不带GET参数。 {{请求。get_full_path}} #带有GET参数
对于上面的两个代码,这将打印在你的模板中
questions/2345708
另一种获取完整URL的方法是:
{{request.build_absolute_uri}}
这将打印在你的模板将是:
https://stackoverflow.com/questions/2345708