【发布时间】:2014-01-28 14:36:14
【问题描述】:
我对 Django 比较陌生,我正在使用 1.5 版来构建 REST api。对 api 的调用期望返回 JSON(我将它与 Ember.js 前端一起使用)。
我想知道我是否不能这样做:
def listproject(request, pk_id):
# list single project at /projects/<pk_id>
project = Project.objects.get(pk = pk_id)
snapshots = Snapshot.objects.filter(project = project)
# (both are same up to here)
return render_to_response('project.json',
{"project":project, "snapshots":snapshots},
mimetype="text/json")
project.json 是这个 Django 模板的位置:
{
"id": "{{ project.pk }}",
"name": "{{ project.name }}",
"snapshot_ids": [ {% for snapshot in snapshots %}"{{ snapshot.pk }}"{% if not forloop.last %}, {% endif %}{% endfor %}
}
使用 Django 的时间比我长得多的人建议为此使用模板效率低下。他建议我改为:
def listproject(request, pk_id):
# list single project at /projects/<pk_id>
project = Project.objects.get(pk = pk_id)
snapshots = Snapshot.objects.filter(project = project)
# (both are same up to here)
ret_json = []
ret_json.append('{"id": "' + str(project.pk) + '", ')
ret_json.append('"name": "' + project.name + '", "snapshot_ids": [')
snapshot_json = []
for snapshot in snapshots:
snapshot_json.append('"' + str(snapshot.pk) + '",')
ret_json.append(''.join(snapshot_json)[0:-1] + ']}')
return HttpResponse(content=''.join(ret_json), mimetype="text/json")
我都测试过。它们的工作方式相同,但我的版本生成的 JSON 可读性更强。
请帮助我们结束辩论!哪个更有效(为什么)?
【问题讨论】:
-
你为什么只问效率?这不是唯一的标准(你编写 Python,你开始的速度比必要的慢好几倍!)。易于编写和更改它呢?可理解性如何?
-
好点!虽然这是针对生产代码的,所以它的要求更严格一些。 Daniel 和 Anentropic 的答案被证明更容易编写、更改和理解,除了是“正确的方法”之外。到处都是优点!
标签: python django json django-templates ember-data