仅对我的应用程序中的视图运行上下文预处理器

时间:2015-03-26 18:06:47

标签: python django django-templates django-settings

在我的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")),

...但我无法找到一种方法来动态检查视图的命名空间。任何建议都将非常感谢!

1 个答案:

答案 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 {}