【问题标题】:How i can render a template and then redirect to particular URL in Django?我如何呈现模板然后重定向到 Django 中的特定 URL?
【发布时间】:2011-09-26 05:07:45
【问题描述】:

我对 django 视图有疑问。我有一个具有视图并显示表单的 URL /signup.html。此表单的操作指向 /account/create 所以当一切正常时我会重定向到祝贺页面,但是当表单提交时它是无效的,我需要用字典返回最后一个 url错误,但是当我在地址栏中执行 render_to_response 时,它​​是 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))

我做错了什么?

编辑: 如果我通过相同的 url (signup.html) 发布,当我重新加载页面时,我提交了多个帖子,我想防止这种情况发生。

【问题讨论】:

  • 你没有复制/粘贴这个是吗?我注意到你在form = FastSignupForm()之后有一个分号
  • 也许可以,但这与问题无关

标签: django url redirect registration


【解决方案1】:

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

【讨论】:

  • 如果我通过相同的 url (signup.html) 发帖,当我重新加载页面时,我提交了多个帖子,我想防止这种情况发生。
  • @Agusti-N 不幸的是,尝试使用错误字典重定向 URL 很困难。看到这个答案:stackoverflow.com/questions/3209906/…
【解决方案2】:

我很困惑为什么你需要去/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))

main/signup.html

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

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

【讨论】:

  • "如果我通过同一个 url (signup.html) 发帖,当我重新加载页面时,我会提交多个帖子,我想防止这种情况发生。"
  • 我不明白...如果表单无效,他将有多个帖子提交。就他而言,他将有一个额外的重定向步骤
猜你喜欢
  • 2014-02-06
  • 2016-02-19
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
  • 1970-01-01
  • 2021-09-05
  • 2021-10-14
相关资源
最近更新 更多