我的应用程序中的用户注册是按步骤执行的。提交表单后,执行一些验证,然后调用register_prompt视图。它呈现一个表单,有两个选项 - 'ok'和'cancel'。单击“确定”将运行注册,单击“取消”将重定向到主页面。问题是,无论我选择哪一个,我都被重定向到带有空白页面的... / user / registration / function_1_or_2_name(虽然我在HttpResponseRedirect中指定了url)。我怎样才能使它发挥作用?
def register_prompt(request):
context = RequestContext(request)
return render_to_response('user/data_operations/alert.html', context_instance=context)
在alert.html上加载的表单:
<form action="" method="post">
<input type="submit" class="submit" name="submit" onClick="this.form.action='{% url register_new %}'" value="Ok" />
<input type="submit" class="submit" name="submit" onClick="this.form.action='{% url redirect_home %}'" value="Cancel" />
</form>
重定向视图(可能还有更好的方法吗?):
def redirect_home(request):
return HttpResponseRedirect('/')
def register_new(request):
(... registration magic here ...)
return HttpResponseRedirect('/user/registration/complete/')
最后是url conf:
url(r'^register_new/$', register_new, name="register_new"),
url(r'^redirect_home/$', redirect_home, name="redirect_home"),
url(r'^register_prompt/$', register_prompt, name="register_prompt"),
起初我试图在表单的按钮中添加一些抽象值(比如'action = ok'),然后在register_prompt中捕获它们,但这完全是灾难。
答案 0 :(得分:0)
我不确定onClick=""
hack是否真的有效(我会让别人对此进行评估),但你是否尝试使用普通链接,看看是否是那个或其他什么?
<a href="{% url register_new %}">OK</a>
<a href="{% url register_home %}">Cancel</a>
(如果您确实希望它看起来像按钮,请查看<button>
。或者只使用两个<form>
,每个action=""
都有一个单独的{% url .. %}
属性。)
哼声,除此之外......你说“... / user / registration / function_1_or_2_name” - register_prompt()
给你带来了什么?它是否不添加最终/(您在模式中需要)?
起初我试图添加一些 形成按钮的抽象值 (比如'action = ok'),然后赶上 他们在register_prompt但它是一个 完全灾难。
但你似乎想要操纵动作属性,所以你不能抓住def register_prompt(req):
if 'ok' in req.POST:
return register_new(req)
if 'cancel' in req.POST:
return register_cancel(req)
return render_to_response('user/data_operations/alert.html',
context_instance=RequestContext(req))
中的任何东西?
总而言之,我建议您使用普通链接,或者在呈现它的视图中实际处理POST:
ok
也许是这样的?将您的按钮重命名为cancel
和{{1}},并将表单发回给自己......