我怎么能得到完整/绝对的URL(例如https://example.com/some/path)在Django没有网站模块?这太愚蠢了……我不需要查询我的数据库来抓取URL!
我想使用reverse()。
我怎么能得到完整/绝对的URL(例如https://example.com/some/path)在Django没有网站模块?这太愚蠢了……我不需要查询我的数据库来抓取URL!
我想使用reverse()。
当前回答
我使用这个代码:
request.build_absolute_uri('/')[:-1]
回应:
https://yourdomain.com
其他回答
如果你使用的是django REST框架,你可以使用rest_framework.reverse中的反向函数。这与django.core.urlresolvers的行为相同。相反,除了它使用一个请求参数来构建一个完整的URL。
from rest_framework.reverse import reverse
# returns the full url
url = reverse('view_name', args=(obj.pk,), request=request)
# returns only the relative url
url = reverse('view_name', args=(obj.pk,))
经过编辑,只提到REST框架中的可用性
正如在其他答案中提到的,request.build_absolute_uri()是完美的,如果你可以访问request,而sites框架是伟大的,只要不同的url指向不同的数据库。
然而,我的用例略有不同。我的登台服务器和生产服务器访问相同的数据库,但是get_current_site都返回数据库中的第一个站点。要解决这个问题,必须使用某种环境变量。你可以使用1)一个环境变量(类似os.environ。get('SITE_URL', 'localhost:8000'))或2)不同的site_id为不同的服务器和不同的设置。
希望有人会觉得这有用!
要从模板创建到另一个页面的完整链接,您可以使用以下命令:
{{ 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,)))
我使用这个代码:
request.build_absolute_uri('/')[:-1]
回应:
https://yourdomain.com