目前我有一个类,我在每个视图中调用一些全局上下文变量,我在模板中使用它。它看起来像这样:
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)
是否可以减少代码?如果可能,我不想在每个视图中重复调用。谢谢。
答案 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',
)