3

私はこの1つのように、約700の入力要素を出力し終わるテンプレートいる:ビュー関数を呼び出し、テンプレートをレンダリング(HTMLを生成するが、時間をレンダリングブラウザを数えていない)と一緒にdjango:テンプレートのモデルの.idフィールドが遅いのはなぜですか?

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

は、それが取ります約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

恐らくそれについてはわからないが、余分なSQL呼び出しを行う可能性があります。http://pypi.python.org/pypi/django-debug-toolbar-django13/0.8.4のようなものを使用してプロファイリングを試してください。 – armonge

+0

戻るあなたはあなたのチケットモデルに何本持っていますか? – nicolas

+0

@nicolas:postgresql、チケットモデルのフィールド数は – Claudiu

答えて

0

実行されているSQLクエリを調べてみてください。 /tmp/queries.txtで見て、実際に行われていたものをクエリ見に行くその後

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() 

:シェル(./manage.py shell)からこれを試してみてください。それぞれのクエリにも時間がかかります。珍しいもの(テンプレートループを通して毎回のクエリなど)が表示されない場合、問題はおそらくデータベースではないので、わかりません。

関連する問題