我在第x页和第y页上有一个按钮,重定向到第z页。 在页面z,我有一个需要填写的表单。保存后,我想重定向到页面x或y(我最初使用的那个)。
通常,您在视图中使用“重定向”,并指定要重定向到的页面。但是在这种情况下你会怎么做?
有什么想法吗?
谢谢!
答案 0 :(得分:11)
您可以使用GET参数来跟踪您到达页面z的页面。因此,当您正常到达页面z时,我们会记得我们来自哪个页面。当您在页面z上处理表单时,我们使用以前保存的信息进行重定向。所以:
第y页上的按钮/链接应包含一个参数,其值为当前网址:
<a href="/page_z/?from={{ request.path|urlencode }}" />go to form</a>
然后在page_z的视图中,您可以将其传递到模板:
def page_z_view(self, request):
...
return render_to_response('mytemplate.html', { 'from' : request.GET.get('from', None) })
并在您的表单模板中:
<form action="{% if from %}?next={{ from }}{% endif %}" />
...
现在,表单 - 提交时 - 将传递next
参数,该参数指示在成功提交表单后返回的位置。我们需要恢复视图才能执行此操作:
def page_z_view(self, request):
...
if request.method == 'POST':
# Do all the form stuff
next = request.GET.get('next', None)
if next:
return redirect(next)
return render_to_response('mytemplate.html', { 'from' : request.GET.get('from', None)}
答案 1 :(得分:2)
Django请求知道用户来自哪个页面:
previous_page = request.META['HTTP_REFERER']
它将包含类似的内容:
>>> print(previous_page)
'http://www.myserver.com/myApp/z'
因此,您知道自己的来源(警告,将其视为不安全的数据并彻底验证,甚至可能包含恶意数据)并使用这些信息。
首先,您将其作为
传递给模板data = {
...,
# also indicate, that saved data are valid and user can leave
'previous_page': previous_page,
}
渲染页面z.html
return render(request, 'myApp/z.html', data)
在页面z的模板中,您将元刷新标记添加到。这将导致一旦表单被保存并加载页面,用户将被重定向自动重定向:
{% if form_is_saved and previous_page %}<meta http-equiv="refresh" content="0; url={{ previous_page }}" />{% endif %}
这样做的好处是,表单由页面z.html保存,填充它并且您不需要通过页面x和y来处理它(如果页面x和y,这是唯一的方法)在你的Django应用程序之外。)
答案 2 :(得分:-3)
存储有关您用户访问过的网页的信息,以便日后检索。可能最好的地方就是在会议中。