将window.location传递给Flask url_for

时间:2016-06-16 14:52:24

标签: javascript python url flask

我正在使用python。在我的页面上,当匿名用户进入登录页面时,我想将一个变量传递给后端,以便它指示用户来自哪里(发送URL)。 / p>

因此,当用户点击此锚链接时:

<a href="{{ url_for('account.signin') }}">Sign in</a>

我想发送当前用户所在页面的当前网址。

<script>
 var current_url = window.location.href;
<script>

我想这样发送:

<a href="{{ url_for('account.signin', current_url="window.location.href") }}">Sign in</a>

但我无法在url_for中使用javascript代码或如何传递它?

4 个答案:

答案 0 :(得分:4)

在渲染模板时使用request.path获取路径。

<a href="{{ url_for('account.signin') }}?next={{ request.path }}">Sign in</a>

答案 1 :(得分:3)

假设你正在使用Django。

在您的视图中,您可以返回用户可以从的上一个位置:

from django.http import HttpResponseRedirect

def foo(request, *a, **kw):
    # sign in user
    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

或者使用Jquery:

为链接添加ID。

<a href="{{ url_for('account.signin') }}" id="signin">

然后添加下一个参数并将浏览器重定向到新网址。

$("#signin").click(function(e){
    e.preventDefault()
    window.location = $(this).href + "?next=" + window.location.href;
}

应该产生类似:url/for/signin?next=prev/location

的内容

在您的视图中,您可以访问下一个变量,如下所示:

def foo(request, *a, **kw):
    next_url = request.GET["next"]

答案 2 :(得分:1)

我认为你应该最好地使用request对象,因为它确实提供了一个headers字典,其中包含所有请求标题,引用了烧瓶的文档:

  

headers

     

传入的请求标题为对象等字典。

现在,其中一个标题元素是HTTP_Referer,即:

  

HTTP referer(最初是引用者1的拼写错误)是HTTP   标题字段,用于标识网页的地址(即URI)   或IRI)链接到所请求的资源。通过检查   引荐来源,新网页可以查看请求的来源。

最后,您可以从flask访问它,就像访问任何字典项一样:

>>> print('Referer is {}'.format(request.headers.get('Referer')))

答案 3 :(得分:0)

您可以使用request.path来获取当前的URL路径(也可以使用request.full_path来包含当前URL路径的查询字符串部分),但是无需自己构造查询字符串,只需将其传递给current_url

任何传递给url_for的不是URL变量的关键字参数都会自动成为查询参数:

<a href="{{ url_for('account.signin', current_url=request.path) }}">Sign in</a>