加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Django TEMPLATE_CONTEXT_PROCESSORS被调用的次数太多了

发布时间:2020-12-20 11:25:55 所属栏目:Python 来源:网络整理
导读:我需要在所有页面中显示一些统计数字,所以我决定使用上下文处理器.但我只是发现每个页面加载时我的函数被调用了2到7次.我在函数内部进行了4次查询,因此我的性能非常糟糕.每个页面加载最多可能需要28(4 * 7)个查询… 我想知道为什么会这样,我该怎么做才能避免
我需要在所有页面中显示一些统计数字,所以我决定使用上下文处理器.但我只是发现每个页面加载时我的函数被调用了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也是对的.我们需要特别注意我们在上下文处理器中添加的内容.我更改了代码,我只是在着陆页中显示统计数字.

解决方法

TEMPLATE_CONTEXT_PROCESSORS中的设置功能具有在所有页面中使用它的优点.但请注意,即使您没有调用它或使用它,它仍会加载查询,因为它直接从设置调用.这将导致糟糕的表现.当您必须在每个模板(例如用户或其他没有大量成本的参数)中使用它时,仅使用上下文处理器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读