将查询变量加载到包含的模板页面中

时间:2014-08-19 12:43:19

标签: django

我只是想知道是否有一种简单的方法可以做到这一点。

说我有index.html:

<HTML>

    {% include 'sidebar.html' %}

</HTML>

和sidebar.html页面:

<b>{{company}}</b>

index.html的views.py视图包含一个上下文,例如:

context['company'] = Company.objects.get(id=3)

我的问题如下。该侧边栏和该变量将被加载到许多页面中,我宁愿不将上下文加载到使用公司名称的每个视图中。我只想将其包含在侧边栏中,并且每次都包含它。

所以从本质上讲,我想从每个使用它的视图中提取它来减少冗余。

谢谢!

1 个答案:

答案 0 :(得分:3)

您需要创建自己的上下文处理器:

def company_context(request):
    return {
        'company':Company.objects.get(id=3),
    }

在设置中将新的上下文处理器添加到TEMPLATE_CONTEXT_PROCESSOR 例如:

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.contrib.messages.context_processors.messages",
    "path.to.context.processor.company_context", 

之后你在视图中照常使用渲染:

return render(request, self.template_name, {})

如果您不使用渲染,请确保使用RequestContext

Django Docs Reference