我對Django比較新,我使用1.5版來構建REST api。調用api需要返回JSON(我使用Ember.js前端)。我應該擔心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)
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。
請幫助我們結束辯論!哪個更有效率(以及爲什麼)?
爲什麼你要問大約只有efficency?這不是唯一的標準(你寫Python,你開始比必要慢幾倍!)。如何輕鬆寫作並改變它?可理解性呢? – delnan
好點!儘管這是針對生產代碼的,但它的要求更爲嚴格。 Daniel和Anentropic的答案變得更容易編寫,改變和理解,除了做「正確的方式」之外。優點四周! – nickiaconis