在我的网页中,我有一个表格在一些ajax请求之后填充了数据。例如,当用户从列表中选择项目时,会向数据库发送一个简单的ajax请求,表明该项目已被选中(但尚未确认)。然后网页上的列表使用simpe ajax请求(仅列表,而不是整个页面)重新加载以获取新项目列表。
我认为这或多或少是经典的购物车实施。
然而,当用户按下提交(经典表单POST提交,而不是ajax POST由于某些原因有关实现)来确认整个列表时,我想返回当前页面。 (当前页面不同)这可能吗?我正在使用django。
感谢。
答案 0 :(得分:11)
您可以在提交表单时提供next
GET参数,类似于django.contrib.auth的login()
方法:
https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.views.login:
<form action="/url/to/post/form/?next={{ some_variable }}">
其中变量可以只是当前URL(取自请求)或生成的URL。在处理表单的视图中,只需检查next
参数并正确重定向:
from django.shortcuts import redirect
if 'next' in request.GET:
return redirect(request.GET['next'])
答案 1 :(得分:1)
您可以使用发布/重定向/获取设计模式(PRG)。有关Post / Redirect / Get的更多一般信息,请参阅以下内容:http://en.wikipedia.org/wiki/Post/Redirect/Get这里有一些很好的流程图。
实现PRG的视图的一般示例可能如下所示:
# urls.py
urlpatterns = patterns('',
url(r'^/$', views.my_view, name='named_url'),
)
# forms.py
class MyForm(forms.Form):
pass # the form
# views.py
def my_view(request, template_name='template.html'):
""" Example PostRedirectGet
This example uses a request context, but isn't
necessary for the PRG
"""
if request.POST:
form = MyForm(request.POST)
if form.is_valid():
try:
form.save()
# on success, the request is redirected as a GET
return HttpResponseRedirect(reverse('named_url'))
except:
pass # handling can go here
else:
form = MyForm()
return render_to_response(template_name, {
'form':form
}, context_instance=RequestContext(request))
如果您需要使用GET做一些更有趣的事情,reverse
可以采取args和kwargs。操纵视图params,url_pattern和反向调用以显示您想要查看的结果。
另外需要注意的是,您不必重定向到同一视图(如本示例所示)。它可以是您想要将用户重定向到的任何命名视图。
答案 2 :(得分:0)
当前页面是一个非常模糊的术语,但我假设您需要将您引导到表单页面的页面,这通常(并非总是)存储在请求本身的HTTP_REFERRER标头中。您可以尝试从请求中获取该内容并执行重定向。