Wagtail/Django 块无法从自定义/嵌套 StructBlock 模板正确呈现内容

ben*_*war 2 css python django templates wagtail

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

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

<head>
  {% block extra_css %}{% endblock %}
</head>
<body>
  {% block content %}{% endblock %}
</body>
Run Code Online (Sandbox Code Playgroud)

然后,在我的detail.html模板(从底座延伸出来)中,我有:

{% block content %}
  {% for block in page.body %}
    {{ block }}
  {% endfor %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

bodyStreamField鹡鸰中的一个。其中一个字段是 custom 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'
Run Code Online (Sandbox Code Playgroud)

最后,在该callout.inc.tpl模板中,我尝试渲染一个应该注入到我的块中的<style>标签:extra_css

{% block extra_css %}
  <style>
    .accent_color {
      background-color: {{accent_color}} !important;
    }
  </style>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

然而,这个块并没有<head>像我预期的那样注入到 中。相反,它在正文中呈现,如下所示,就好像标签{% block extra_css %}根本不存在一样:

<head>
</head>
<body>
  <style>
    .accent_color {
      background-color: {{accent_color}} !important;
    }
  </style>
</body>
Run Code Online (Sandbox Code Playgroud)

只是 Django 模板的限制吗?嵌套是问题吗?或者是因为我在模型级别使用自定义模板,而这在某种程度上超出了父模板解析的范围?

姜戈:1.10
鹡鸰:1.6

gas*_*man 5

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

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