2014-12-07 17 views
1

所以这个问题很简单。最终用户填写表单并点击提交,然后我希望页面重新加载(如果成功)。问题在于表单位于每个用户个人资料页面上,而不是静态网址。所以,我不能这样做:如何在views.py中呈现当前页面?

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

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

回答

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}) 
+0

伟大的答案。谢谢。 – stephan 2014-12-08 22:08:28

相关问题