只有 运行 个上下文预处理器用于来自我的应用的视图

Only run context preprocessor for views from my app

在我的 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 project/instance/server/whatever 上的众多应用程序之一 运行。因为它被添加到 TEMPLTATE_CONTEXT_PROCESSOR 常量,它会在每次 any 应用程序的视图运行时执行。我想确保它仅在调用来自 my 应用程序的视图时运行,以避免增加来自其他应用程序的视图的开销。 如何验证被调用的视图是否来自我的应用程序?如果有帮助,我确实为我的应用程序设置了命名空间:

url(r'^pm/', include('pm.urls', namespace="pm")),

...但我想不出一种方法来即时检查视图的命名空间。任何建议将不胜感激!

从 1.5 开始,ResolverMatch 对象存储在 request.resolver_match 上,其中包含当前 url:

的命名空间列表
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 {}