すべてのページにいくつかの統計番号を表示する必要があるため、コンテキストプロセッサを使用することにしました。しかし、ページが読み込まれるたびに関数が2〜7回呼び出されていることがわかりました。関数内で4つのクエリを実行しているため、パフォーマンスが非常に悪くなっています。ページを読み込むたびに、最大28(4 * 7)のクエリが必要になる場合があります...
なぜこれが起こっているのか、そしてそれを回避するために何ができるのか知りたいです。
settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.request',
'django.contrib.messages.context_processors.messages',
'django.core.context_processors.static',
'core.views.numbers',
)
views.py
def numeros(request):
...
a=table1.objects.count()
b=table2.objects.count()
c=table3.objects.count()
d=table4.objects.count()
...
return {'a': a,
'b': b,
'c': c,
'd': d,
'e': e,
'f': f,
'g': g,
'h': h
}
[更新-ありがとう] @okmと@catherineは、非常に優れた補足的な説明を提供しました。@okmが言ったように、両方とも正しかった。私がRequestContextを何度も使用していたため、コンテキストプロセッサが何度も呼び出されていた。
@catherineも正しいです。コンテキストプロセッサに何を入れるかについては、特に注意を払う必要があります。コードを変更しましたが、ランディングページに統計番号を表示しているだけです。