【问题标题】:Wagtail/Django block doesn't render content properly from custom/nested StructBlock templateWagtail/Django 块无法从自定义/嵌套的 StructBlock 模板正确呈现内容
【发布时间】:2016-12-21 18:23:03
【问题描述】:

我的基本模板的头部有一个块,它将呈现“额外”的 CSS。此 CSS 将根据来自 Wagtail CMS 实例的字段进行自定义。

所以,在base.html 模板中我有:

<head>
  {% block extra_css %}{% endblock %}
</head>
<body>
  {% block content %}{% endblock %}
</body>

然后,在我的detail.html 模板中,它从基础延伸出来,我有:

{% block content %}
  {% for block in page.body %}
    {{ block }}
  {% endfor %}
{% endblock %}

body 是 Wagtail 中的 StreamField。其中一个字段是自定义StructBlock,其模型设置如下:

class CalloutBlock(blocks.StructBlock):
    accent_color = blocks.CharBlock(required=False, label='Accent Color', help_text='HEX Value/Color')
    class Meta:
        template = 'inc/blocks/callout.inc.tpl'

最后,在那个callout.inc.tpl 模板中,我试图渲染一个&lt;style&gt; 标签,应该 将其注入我的extra_css 块中:

{% block extra_css %}
  <style>
    .accent_color {
      background-color: {{accent_color}} !important;
    }
  </style>
{% endblock %}

但是,这个块并没有像我预期的那样注入&lt;head&gt;。相反,它在正文中呈现,就像 {% block extra_css %} 标记根本不存在一样:

<head>
</head>
<body>
  <style>
    .accent_color {
      background-color: {{accent_color}} !important;
    }
  </style>
</body>

仅仅是 Django 模板的限制吗?嵌套是问题吗?还是因为我在模型级别使用了自定义模板,而这超出了父模板解析的范围?

Django:1.10
鹡鸰:1.6

【问题讨论】:

    标签: python css django templates wagtail


    【解决方案1】:

    这是 StreamField 块的自定义模板工作方式的限制。 (不过,在 Django 模板中通常也有类似的限制 - {% block %} 机制只能与 {% extends %} 一起使用,而不是 {% include %}。)块的 HTML 内容在对模板引擎的单独调用中呈现,独立于外部页面模板,因此无法在两者之间传递控制权。

    (请注意,Wagtail 1.6 引入了{% include_block %} 标签,这通过允许将变量从外部模板的上下文传递到块模板来稍微改善了这种情况。它仍然不允许将控制权从一个传递给不过其他的。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 2011-12-15
      相关资源
      最近更新 更多