如何在views.py中呈现当前页面?

时间:2014-12-07 07:37:58

标签: django django-views

所以问题很简单。最终用户填写表单并点击提交,我希望页面然后重新加载(如果成功)。问题是表单位于每个用户个人资料页面上,而不是静态URL。所以我无法做到:

return HttpResponseRedirect('/accounts/{{ username }}')

我知道在这个例子中我无法传递一个变量,但我不确定如何做到这一点。还有另一种方法来完成我在这里要做的事情吗?有没有办法只刷新当前页面?我现在不是在寻找任何ajax解决方案,我只是在提交表单时尝试重新加载当前页面。

1 个答案:

答案 0 :(得分:4)

如果是POST请求,则不应重新加载同一页面,应始终重定向(请参阅PRG)。因此,我认为您的意思是您希望在成功提交后重定向到相同的视图。

您可以使用request.user获取当前登录的用户,因此您可能需要尝试以下内容:

from django.shortcuts import render, redirect

def some_view(request):
  form = SomeForm(request.POST or None)
  if form.is_valid():
     # do something
     return redirect('/accounts/{}'.format(request.user))
  return render(request, 'form.html', {'form': form})

但是,如果您已将帐户命名为url模式,那就更好了:

url('/accounts/(?P<username>\w+)/$', 'some.view', name='user-home')

现在,你可以这样做:

def some_view(request):
    form = SomeForm(request.POST or None)
    if form.is_valid():
        # do something
        return redirect('user-home', username=request.user)
    return render(request, 'form.html', {'form': form})