我如何渲染模板,然后重定向到Django中的特定URL?

时间:2011-06-30 18:01:02

标签: django url redirect registration

我对django视图有疑问。我有一个网址 /signup.html ,它有一个视图并显示一个表单。此表单的操作指向 / account / create 所以当一切正常时我会重定向到恭喜页面,但是当表单提交它无效时,我需要用字典回到最后一个url但是当我在地址栏中执行render_to_response url时,它是 account / create ,并且 /signup.html

以下是代码:

def signup(request):
    return render_to_response('main/signup.html' , {} , context_instance=RequestContext(request))

def create_account(request):
    if request.method == 'POST':
        form = FastSignupForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            return redirect('/account/congratulations' , {} , context_instance=RequestContext(request))
    else:
        form = FastSignupForm();

    return render_to_response('main/signup.html', {'form':form} , context_instance=RequestContext(request))

def congrats(request):
    return render_to_response('main/congrats.html', {}, context_instance=RequestContext(request))

我做错了什么?

修改 如果我发布相同的网址(signup.html),当我重新加载页面时,我有多个帖子提交,我想阻止这个。

2 个答案:

答案 0 :(得分:1)

为什么不发布到相同的网址(signup.html),然后只在成功时重定向?

答案 1 :(得分:0)

我很困惑为什么你需要去/account/create。你能不能这样做:

views.py

def signup(request):
    if request.method == 'POST':
        form = FastSignupForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            return redirect('/account/congratulations' , {} , 
                         context_instance=RequestContext(request))
    else:
        form = FastSignupForm();

    return render_to_response('main/signup.html', {'form':form} , 
                 context_instance=RequestContext(request))

def congrats(request):
    return render_to_response('main/congrats.html', {}, 
                 context_instance=RequestContext(request))

主/ signup.html

...
<form method="post" action=".">
    ...
</form>
...

我不确定你是否真的需要去create_account(),但如果你不这样做,这应该适合你。