我怎么能得到完整/绝对的URL(例如https://example.com/some/path)在Django没有网站模块?这太愚蠢了……我不需要查询我的数据库来抓取URL!
我想使用reverse()。
我怎么能得到完整/绝对的URL(例如https://example.com/some/path)在Django没有网站模块?这太愚蠢了……我不需要查询我的数据库来抓取URL!
我想使用reverse()。
当前回答
在你看来,只需这样做:
base_url = "{0}://{1}{2}".format(request.scheme, request.get_host(), request.path)
其他回答
你可以试试"request.get_full_path()"
如果你想使用reverse(),你可以这样做:request。build_absolute_uri(反向(view_name, args = (obj。pk,)))
request.get_host()
在django中使用这个请求对象
还有ABSOLUTE_URL_OVERRIDES可用作为设置
https://docs.djangoproject.com/en/2.1/ref/settings/#absolute-url-overrides
但这将覆盖get_absolute_url(),这可能是不可取的。
我认为更好的解决方案是把它放在models.py中,而不是仅仅为此安装sites框架,或者做一些这里提到的依赖于request对象的其他事情
在settings.py中定义BASE_URL,然后将其导入models.py并创建一个抽象类(或将其添加到您已经在使用的类中),该类定义get_truly_absolute_url()。它可以很简单:
def get_truly_absolute_url(self):
return BASE_URL + self.get_absolute_url()
子类化它,现在你可以在任何地方使用它。
<div class='col-12 col-md-6'>
<p class='lead'>Login</p>
{% include 'accounts/snippets/form.html' with form=login_form next_url=request.build_absolute_uri %}
</div>
例如,在这里,我说加载表单,并告诉表单,下一个URL是当前的URL,这段代码呈现