我怎么能得到完整/绝对的URL(例如https://example.com/some/path)在Django没有网站模块?这太愚蠢了……我不需要查询我的数据库来抓取URL!
我想使用reverse()。
我怎么能得到完整/绝对的URL(例如https://example.com/some/path)在Django没有网站模块?这太愚蠢了……我不需要查询我的数据库来抓取URL!
我想使用reverse()。
当前回答
要从模板创建到另一个页面的完整链接,您可以使用以下命令:
{{ request.META.HTTP_HOST }}{% url 'views.my_view' my_arg %}
request.META。HTTP_HOST给出主机名,url给出相对名。然后模板引擎将它们连接成一个完整的url。
其他回答
如果你想使用reverse(),你可以这样做:request。build_absolute_uri(反向(view_name, args = (obj。pk,)))
在做一个项目的时候,我学会了在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
在你看来,只需这样做:
base_url = "{0}://{1}{2}".format(request.scheme, request.get_host(), request.path)
试试下面的代码:
{{ request.scheme }}://{{ request.META.HTTP_HOST }}
你也可以使用get_current_site作为sites应用程序的一部分(from django.contrib.sites.models import get_current_site)。它接受一个请求对象,如果request为None,则默认为您在settings.py中使用SITE_ID配置的站点对象。阅读更多使用站点框架的文档
e.g.
from django.contrib.sites.shortcuts import get_current_site
request = None
full_url = ''.join(['http://', get_current_site(request).domain, obj.get_absolute_url()])
它不像request.build_absolute_url()那样紧凑/整洁,但是当请求对象不可用时,并且您有一个默认的站点url时,它是可用的。