我正在使用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代码或如何传递它?
答案 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>