django:为什么模板中的模型.id字段缓慢?

时间:2011-09-15 18:29:09

标签: django performance optimization django-models django-templates

我有一个模板,最终输出大约700个输入元素,如下所示:

<input class="ticket" size="3" maxlength="15" type="text" name="{{ ticket.id }}">

与调用视图函数和渲染模板(生成HTML,但不计算浏览器渲染时间)一起,需要大约1.5秒。我正在优化模板以查看最长时间的内容,因为还有一些其他更复杂的事情正在发生......我意识到如果我删除{{ ticket.id }}部分,渲染时间下降到~0.48秒。我甚至在票证模型上做了一个功能:

def get_input_name(self): return str(self.id)

并替换模板中的行:

<input class="ticket" size="3" maxlength="15" type="text" name="{{ ticket.get_input_name }}">

并且这产生相同的输出,在~0.52秒。

为什么调用{{ ticket.id }}这么慢?

1 个答案:

答案 0 :(得分:0)

尝试查看正在执行的SQL查询。从shell(./manage.py shell)试试这个:

from django.db import connection
from pprint import pprint
from django.http import HttpRequest
from myproject.myapp.views import myview
f = open('/tmp/queries.txt','w')
myview(HttpRequest(), whatever_other, args_you_need)
pprint(connection.queries, f)
f.close()

然后查看/tmp/queries.txt并查看实际查询的内容。每个查询也将花费时间。如果您没有看到任何异常(例如每次通过模板循环查询),那么您的问题可能不是数据库,我不知道。