在我的django应用程序(“pm
”)中,我有一个模板上下文处理器,它为每个视图添加了许多变量:
def menu_items(request):
return {
'projects': Project.objects.all().order_by('name'),
'people': People.objects.filter(Q(group="MAAD") | Q(group="OAR")).order_by('name')
}
问题是,我的应用只是在我们的django项目/实例/服务器上运行的众多应用之一。由于这已添加到TEMPLTATE_CONTEXT_PROCESSOR
常量,因此每次任何应用程序的视图运行时都会执行该常量。我想确保只在调用 my 应用程序的视图时才会运行此操作,以避免从其他应用程序的视图中增加开销。 如何验证所调用的视图是否来自我的应用?如果有帮助,我确实为我的应用设置了命名空间:
url(r'^pm/', include('pm.urls', namespace="pm")),
...但我无法找到一种方法来动态检查视图的命名空间。任何建议都将非常感谢!
答案 0 :(得分:2)
从1.5开始,ResolverMatch
对象存储在request.resolver_match
上,其中包含当前网址的命名空间列表:
def menu_items(request):
if 'pm' in request.resolver_match.namespaces:
return {
'projects': Project.objects.all().order_by('name'),
'people': People.objects.filter(Q(group="MAAD") | Q(group="OAR")).order_by('name')
}
return {}