我有这样的中间件:
class PostModelFormMiddleware(object):
def process_request(self, request):
form = PostModelForm()
request.post_form = form
此表单有一个验证码字段。我希望在我的模板中发生的是每次一个人点击提交时,通过Javascript刷新一个新的问题。如何在jQuery中获取request.post_form
及其数据?
谢谢!
编辑:更多代码。
HTML:
<form id="add_post">
...
<input type="hidden" name="math_captcha_question" value="fbc9fcdffbf2b2723ab36e9f341372214daf1be936202d2035">
6 - 5 =
...
</form>
我想更改“math_captch_question”的值以及显示的文本。最初使用模板标记{{request.post_form.math_captcha_question}}
jQuery:
$("form#add_post").submit(function() {
//Validations and stuff
var data = {category:category, body:body, nickname:nickname, math_captcha_question:math_captcha_question, math_captcha_field:math_captcha_field};
var args = {type:"POST", url:"add_post/", data:data, complete:function(res, status) {
//Process response
//This is where I would like to set new values for math_captcha_question
} };
$.ajax(args);
}
return false;
})
/ add_post / view:
def add_post(request):
if request.method == 'POST':
if form.is_valid():
#do stuff
return HttpResponse("success")
else:
return HttpResponseServerError("fail")
答案 0 :(得分:1)
您必须首先在模板中输出表单,给它一个id
或其他标识符,然后您可以通过jQuery访问它。
<form id="myform" ...>
{{request.post_form}}
</form>
修改:我假设您'django.core.context_processors.request'
设置中有TEMPLATE_CONTEXT_PROCESSORS
。
更新(根据以下评论):
您的add_post
视图需要返回响应中jQuery.ajax
可以处理的内容。如果它只是返回"success"
,则响应中将只有纯文本。为了方便起见,您应该返回新的math_captcha_question
值:
def add_post(request):
if request.method == 'POST':
#fill some data in the form
form = PostModelForm(request.POST)
if request.post_form.is_valid()
math_captcha_question = form.cleaned_data["math_captcha_question"]
return HttpResponse(math_captcha_question)
else:
return HttpResponse("error")
在jquery的回调中,您可以处理所获得的值并相应地提供用户友好的响应。在你complete
回调:
function(res, status) {
if (res!="error") {
$("form#add_post #id_math_captcha_question").attr("value", res);
} else {
//show some error to your user
}
}