Django App中的全局视图 - 上下文

时间:2017-09-26 02:00:59

标签: python django django-templates django-views

目前我有一个类,我在每个视图中调用一些全局上下文变量,我在模板中使用它。它看起来像这样:

class WikiContext():
    def getWikiContext(self, view, request):
        context = {
            'app': request.resolver_match.app_name,
            'controller': view.__class__.__module__.split('.')[-1],
            'action': view.__class__.__name__.lower(),
            'categories': CategoryModel.objects.all()
        }

        return context

我在每个视图中都这样称呼它:

context = WikiContext().getWikiContext(self, request)

是否可以减少代码?如果可能,我不想在每个视图中重复调用。谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用a context processor。它将在呈现模板时自动加载。因此,无需在每个视图中发出请求。

答案 1 :(得分:0)

您可以在上下文处理器中执行此操作。做类似的事情:

def wiki_context_processor(request):
    return {
        'app': request.resolver_match.app_name,
        'controller': view.__class__.__module__.split('.')[-1],
        'action': view.__class__.__name__.lower(),
        'categories': CategoryModel.objects.all()
    }

然后,您可以将其添加到settings.py文件中的TEMPLATE_CONTEXT_PROCESSORS

TEMPLATE_CONTEXT_PROCESSORS = (
    'myproject.context_processors.wiki_context_processor',
)