Jquery 使用Django';s JSONResponseMixin响应AJAX请求
我与Django&AJAX合作。基本上,我只是想让javascript(vote.js)发布一些数据 到Django视图,反过来,该视图将用JSON数据响应到html,以便我的javascript回调函数可以使用来自服务器的响应 这是我的代码: vote.jsJquery 使用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,
$(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。改为渲染到响应(数据)