如何在Django中不使用模板的情况下返回JSON?

我有一个适用于Django应用的命令行Python API。当我通过API访问该应用程序时,它应该返回JSON,而在浏览器中它应该返回HTML。我可以使用不同的URL访问不同的版本,但是如何只用一个模板在views.py中呈现HTML模板和JSON ?

要呈现HTML,我将使用:

return render_to_response('sample/sample.html....')

但是如何在不放置JSON模板的情况下对JSON做同样的事情?(content-type应为application/json而不是text/html

什么将决定JSON和HTML输出?

所以在我的views.py:

if something:

return render_to_response('html_template',.....)

else:

return HttpReponse(jsondata,mimetype='application/json')

回答:

我认为这个问题对你想要的东西感到困惑。我想你实际上不是在尝试将HTML放入JSON响应中,而是想要替代地返回HTML或JSON。

首先,你需要了解两者之间的核心区别。HTML是一种表示形式。它比数据本身更多地涉及如何显示数据。JSON相反。它是纯数据-基本上是你拥有的某些Python(在这种情况下)数据集的JavaScript表示形式。它仅充当交换层,使你可以将数据从应用程序的一个区域(视图)移动到应用程序的另一区域(你的JavaScript),而这些区域通常是无法相互访问的。

考虑到这一点,你无需“渲染” JSON,并且不涉及任何模板。你只需将正在使用的所有数据(很可能是你作为上下文传递到模板的数据)转换为JSON。如果是自由格式数据,则可以通过Django的JSON库(simplejson)进行;如果是查询集,则可以通过序列化框架来完成。

simplejson

from django.utils import simplejson

some_data_to_dump = {

'some_var_1': 'foo',

'some_var_2': 'bar',

}

data = simplejson.dumps(some_data_to_dump)

序列化

from django.core import serializers

foos = Foo.objects.all()

data = serializers.serialize('json', foos)

无论哪种方式,你都可以将该数据传递到响应中:

return HttpResponse(data, content_type='application/json')

[编辑]在Django 1.6及更早版本中,返回响应的代码为

return HttpResponse(data, mimetype='application/json')

以上是 如何在Django中不使用模板的情况下返回JSON? 的全部内容, 来源链接: utcz.com/qa/422751.html

回到顶部