Django - 在json ajax响应中混合HTML模板和查询集

时间:2014-06-13 12:28:02

标签: ajax json django

我希望我的观点能够返回我想在Ext.Ajax.request成功函数中使用的页面内容和一些参数。

views.py

def importFile(request):
    form = ImportVectorForm()
    html_response = render_to_response("page_content.html", {'form': form, 'folder':folder, 'nodes':nodes},context_instance=RequestContext(request))
    if request.POST:
        form = ImportVectorForm(request.POST, request.FILES)
        if form.is_valid():
            ## here im dealing with the form...
            object = MyObject.objects.create()
            html_response = render_to_response("page_content.html", {'form': form},context_instance=RequestContext(request))
            json_param = serializers.serialize('json', object)
            return StreamingHttpResponse(html_response, content_type="plain/text")

        else:
            html_response = render_to_response("page_content.html", {'form': form},context_instance=RequestContext(request))

    return StreamingHttpResponse(html_response, content_type="plain/text")

ajax.js:

  importFileAjax = function(node_id){
    Ext.Ajax.request({
      method: "GET",
      form: "importForm",
      url: "/basqui/file/import/" + node_id + "/",
      success: function(r){
                  // here I would like to access the model instance created properties
                  Ext.get('table').update(r.responseText); //this update the page content
               }
    });
  }

我想将html_responsejson_param都传递给Ajax。第一个更新div,第二个访问其属性。

这样做的正确方法是什么?

如何创建包含html模板作为字符串和模型实例的JSON?

1 个答案:

答案 0 :(得分:2)

首先,使用render_to_string将模板片段作为HTML字符串。其次,将对象序列化为Python dict,而不是JSON。然后你可以一次性将整批货转换成JSON。

html = render_to_string("page_content.html", {'form': form}, context_instance=RequestContext(request))
param = serializers.serialize('python', object)
data = json.dumps({'html': html, 'param': param})
return StreamingHttpResponse(data, content_type="application/json")

现在,您的JS可以解析JSON并访问htmlparam值。