我需要在所有页面中显示一些统计数字,所以我决定使用上下文处理器。但我刚刚发现我的函数在每次页面加载时被调用 2 到 7 次。我在函数内部做了 4 个查询,所以我的性能很差。每个页面加载最多可能需要 28 (4*7) 个查询...
我想知道为什么会发生这种情况以及我能做些什么来避免它。
设置.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',
)
视图.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 也是正确的。我们需要特别注意我们在上下文处理器中放置的内容。我更改了我的代码,我只是在登录页面中显示统计数字。