如何使用jQuery将数据发送到Django视图并呈现Django模板?

时间:2017-10-06 23:42:14

标签: javascript jquery python ajax django

我在javascript中有一些数据,想把它发送到Django视图函数。之后,我想使用HttpResponse渲染Django模板,但它是如何工作的?

首先我用jQuery.ajax()将一些数据发送到Django视图并使用了响应数据,现在我想在第二个jQuery.ajax()中发送数据 - 在点击一个按钮后 - 到另一个Django如果我点击一个网站上的简单链接,查看功能,最后渲染一个简单的模板,就像它的工作方式一样。

为了清晰起见,我尽可能地剪掉了片段

$(matchfield).on('click', function(event) {
    event.preventDefault();
    var field = $(this).val();
    $.ajax({
        method: "POST",
        url: "/view-function/",
        data: { "field": field },
        dataType: "json",
        context: this,
        success: function (data) {
            if(data.message === 1) {
                points = 100
                $('#submit').on('click', function(event) {
                    event.preventDefault();
                    $.ajax({
                        url: "/another-view/",
                        method: "POST",
                        data: {"points": points},
                        success:function(response){ // I guess the mistake is here
                            $(document).html(response) 
                        }
                    })
                })
            }
        }
    });
});

如果单击了#submit按钮,则响应的状态代码为200,Chrome开发工具会在预览中显示完整的预期新html页面(没有css样式),但当前页面上没有任何内容。< / p>

这是回复:

<!DOCTYPE html>
<html>
    <head>
        // head stuff
    </head>
    <body>
       // Some stuff
    </body>
</html>

我使用了return HttpResponse(template.render(context, request))

我的观点 - 功能:

from django.http import HttpResponse

def another-view(request):
    if request.method == "POST":
        if request.POST.get("points"):
            points = int(request.POST.get("points"))
            template = loader.get_template('my_template.html')
            context = {'message': "any message"}
            return HttpResponse(template.render(context, request))

这就是我的视图功能的工作原理,点存储在数据库中,并且发生了一些魔法,但一切正常,请求状态码为200.

遗憾的是我不知道我忽略了什么。

来自AJAX的响应(内部ajax()与url:“/ another-view /”)是预期的HTML页面,但在当前页面上没有发生。我想替换整个页面

1 个答案:

答案 0 :(得分:0)

我找到了问题的解决方案。要使用POST数据重定向到Django视图函数,您可以使用jQuery.redirect函数,该函数在包含来自https://github.com/mgalante/jquery.redirect的jquery.redirect.js之后可用

<强> USAGE:

/**
* jQuery Redirect
* @param {string} url - Url of the redirection
* @param {Object} values - (optional) An object with the data to send. If not present will look for values as QueryString in the target url.
* @param {string} method - (optional) The HTTP verb can be GET or POST (defaults to POST)
* @param {string} target - (optional) The target of the form. If you set "_blank" will open the url in a new window.
* @param {boolean} traditional - (optional) This provides the same function as jquery's ajax function. The brackets are omitted on the field name if its an array.  This allows arrays to work with MVC.net among others.
* @param {boolean} redirectTop - (optional) If its called from a iframe, force to navigate the top window. 
*/
$.redirect(url, [values, [method, [target, [traditional, [redirectTop]]]]])