Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 使用Django';s JSONResponseMixin响应AJAX请求_Jquery_Ajax_Django_Django Class Based Views - Fatal编程技术网

Jquery 使用Django';s JSONResponseMixin响应AJAX请求

Jquery 使用Django';s JSONResponseMixin响应AJAX请求,jquery,ajax,django,django-class-based-views,Jquery,Ajax,Django,Django Class Based Views,我与Django&AJAX合作。基本上,我只是想让javascript(vote.js)发布一些数据 到Django视图,反过来,该视图将用JSON数据响应到html,以便我的javascript回调函数可以使用来自服务器的响应 这是我的代码: vote.js $(document).on('click', 'a.upvote', function() { ..... var xhr = { 'id': id, 'upvote': upvote,

我与Django&AJAX合作。基本上,我只是想让javascript(vote.js)发布一些数据 到Django视图,反过来,该视图将用JSON数据响应到html,以便我的javascript回调函数可以使用来自服务器的响应

这是我的代码:

vote.js

$(document).on('click', 'a.upvote', function() {
    .....

    var xhr = {
        'id': id,
        'upvote': upvote,
    };

    $.post(location.href, xhr, function(data) {
        question.find('.rating').html(data.rating)
    });

    return false;
});
视图.py

//I copied this JSONResponseMixin directly from official Django doc
class JSONResponseMixin(object):
    def render_to_response(self, context):
        "Returns a JSON response containing 'context' as payload"
        return self.get_json_response(self.convert_context_to_json(context))

    def get_json_response(self, content, **httpresponse_kwargs):
        "Construct an `HttpResponse` object."
        return http.HttpResponse(content,
                                 content_type='application/json',
                                 **httpresponse_kwargs)

    def convert_context_to_json(self, context):
        "Convert the context dictionary into a JSON object"
        # Note: This is *EXTREMELY* naive; in reality, you'll need
        # to do much more complex handling to ensure that arbitrary
        # objects -- such as Django model instances or querysets
        # -- can be serialized as JSON.
        return json.dumps(context)


class MyListView(JSONResponseMixin, TemplateResponseMixin, DetailView):
    def post(self, request, *args, **kwargs):
        id = request.POST.get('id')
        .....

        data = {'rating': question.rating}

        return render_to_response(data)


    def render_to_response(self, context):
        if self.request.is_ajax():
            return JSONResponseMixin.render_to_response(self, context)
        else:
            return TemplateResponseMixin.render_to_response(self, context)
但是,执行此操作并单击触发javascript帖子的html中的“投票”按钮会给我一个TemplateDoesNotExist错误:

错误

.....
File "/Library/Python/2.7/site-packages/django/template/loader.py", line 139, in find_template                                                      
    raise TemplateDoesNotExist(name)                                               
TemplateDoesNotExist: {'rating': 1}
看起来我的最后5行views.py工作正常。 有什么想法吗(((

谢谢!!!!

render_to_响应需要模板名称作为第一个参数

class MyListView(JSONResponseMixin, TemplateResponseMixin, DetailView):
    def post(self, request, *args, **kwargs):
        id = request.POST.get('id')
        .....

        data = {'rating': question.rating}

        return render_to_response(data)
您最终调用了错误的
render\u to\u response
方法,即
django.shortcuts
中的快捷方式函数,我猜您已经在views.py中导入了该函数

使用
返回self。改为渲染到响应(数据)