使用Django中的jQuery从中间件表单中获取数据

时间:2011-04-29 03:05:20

标签: jquery django

我有这样的中间件:

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")

1 个答案:

答案 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
    }
}