【问题标题】:Django Context Processor on {% include %} Templates?{% include %} 模板上的 Django 上下文处理器?
【发布时间】:2015-11-01 17:12:21
【问题描述】:

我有一个带有几个 {% include 'theme-component.html' %} 标签的 base-theme.html 模板。

我还有一个上下文处理器,它提供模板所需的一些常规项目的字典 - 配置、菜单项等。

当我将它们直接包含在 base-theme.html 中时,context_processor 会将信息发送到基础它们,但当我将它们放入包含的模板时则不会。

例如:

base-theme.html

    <!doctype html...
         {{ config.site_name }}
         {% include 'menu.html' %}
     </html>

以上方法有效。

menu.html

<nav>
  {% for item in menuItems %}
      {{ item }}
  {% endfor %}
</nav>

这不起作用

谁能指出我正确的方向,为什么会发生这种情况?

【问题讨论】:

  • 您是否验证了menuItems 实际上在模板的上下文中?您可以使用 Django 调试工具栏来执行此操作。
  • 是的,当我将 menuItems 放在 'base-theme.html' 中时,它可以工作。

标签: django django-templates


【解决方案1】:

要这样做,请从您的视图中发送菜单项上下文。 Include 仅包含模板,但将其用作上下文,您需要发送上下文

【讨论】:

  • 我的理解是上下文处理器通过请求/响应使变量全局可用。我认为 {% include %} 将继承传递给主模板的任何上下文 - base.html。这不正确吗?
  • 你不对。 {% include %} 包含您的模板,但要在继承的模板中使用上下文,您应该提供上下文。
  • 好吧,愚蠢的问题,然后:如何将上下文包含到 {% include %} 中?
  • 从您的视图中传递上下文。假设您包含的模板具有 {{some_var}} 然后从您要包含的模板的视图中传递此上下文... {'some_var':some_var}
  • 我已经编写了自己的 context_processor,正如我所说,它适用于基础 HTML 文件,但不适用于 {% include %},因此它在全球范围内不可用。
猜你喜欢
  • 2011-01-15
  • 2015-11-27
  • 2020-04-12
  • 1970-01-01
  • 2018-06-03
  • 2013-03-05
  • 2012-04-06
  • 2011-12-16
  • 2016-07-01
相关资源
最近更新 更多