我需要声明一个数据库驱动的字典在所有模板中可以全局访问,并且不应该依赖于视图,因为我需要全局模板。
我厌倦了写一个上下文处理器
但在settings.py
中添加上下文处理器时TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.contrib.messages.context_processors.messages',
'django.core.context_processors.request',
'myapp.context_processors.myfunction",
)
它会多次加载。然后经历这个问题我了解到,当上下文处理器通过RequestContext加载时,所以当我多次调用RequestContext时它会继续加载。
有没有一种方法可以定义一次,并且可以在模板中全局访问,这也不会妨碍我的网站性能
myfunction
就像:
from ipc.declarations.models import MainDeclaration
from django.shortcuts import get_object_or_404
def myfunction(request):
declarationId = 2991
declaration = get_object_or_404(MainDeclaration, pk=declarationId, user=request.user.id)
return {'sectionGlobal': declaration}
答案 0 :(得分:0)
上下文处理器有点过度使用......你现在知道原因了。最好只将它们用于非常简单,轻量级的东西(链接注入设置等)。
允许模板访问视图未提供的数据的正确方法是编写自己的模板标记 - 在这种情况下,简单的赋值标记就足够了:
https://docs.djangoproject.com/en/1.6/howto/custom-template-tags/#assignment-tags