如何在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)进行;如果是查询集,则可以通过序列化框架来完成。
simplejsonfrom 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 serializersfoos = 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