gpt4 book ai didi

Django TEMPLATE_CONTEXT_PROCESSORS 被调用太多次

转载 作者:行者123 更新时间:2023-12-02 07:21:25 25 4
gpt4 key购买 nike

我需要在所有页面中显示一些统计数字,所以我决定使用上下文处理器。但我刚刚发现我的函数在每次页面加载时都会被调用 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 也是正确的。我们需要额外注意我们在上下文处理器中放入的内容。我更改了代码,只是在登陆页面中显示统计数字。

最佳答案

当初始化 RequestContext 实例时,上下文处理器会被一一调用,因此您可能会初始化多个 RequestContext 实例。您能否通过调试来找出它们,例如通过使用 RequestContext 子类在调用 __init__ 时进行打印?

或者您可以返回一个惰性对象,该对象会延迟其评估直到真正需要时,然后查看重复查询的计数是否下降:

def numeros(request):
return {'a': table1.objects.count,
'b': table2.objects.count,
...}

关于Django TEMPLATE_CONTEXT_PROCESSORS 被调用太多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15307449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com