Wagtail/Django 块无法正确呈现来自 custom/nested StructBlock 模板的内容
Wagtail/Django block doesn't render content properly from custom/nested StructBlock template
我的基本模板头部有一个块,它将呈现 "extra" 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
模板中,我试图呈现 应该 注入到我的 extra_css
块中的 <style>
标签:
{% block extra_css %}
<style>
.accent_color {
background-color: {{accent_color}} !important;
}
</style>
{% endblock %}
但是,这个块并没有像我预期的那样注入到 <head>
中。相反,它呈现在正文中,就像 {% block extra_css %}
标签根本不存在一样:
<head>
</head>
<body>
<style>
.accent_color {
background-color: {{accent_color}} !important;
}
</style>
</body>
仅仅是Django模板的限制吗?嵌套是问题吗?或者是因为我在模型级别使用自定义模板,而这在某种程度上超出了父模板解析的范围?
Django: 1.10
鹡鸰:1.6
这是 StreamField 块的自定义模板工作方式的限制。 (不过,Django 模板一般也有类似的限制 - {% block %}
机制只能与 {% extends %}
结合使用,而不是 {% include %}
。)块的 HTML 内容在对模板引擎的单独调用中呈现,独立于外部页面模板,因此无法在两者之间传递控制。
(请注意,Wagtail 1.6 引入了 {% include_block %}
标签,它可以将变量从外部模板的上下文传递到块模板,从而稍微改善了这种情况。它仍然不允许传递控制不过从一个到另一个。)
我的基本模板头部有一个块,它将呈现 "extra" 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
模板中,我试图呈现 应该 注入到我的 extra_css
块中的 <style>
标签:
{% block extra_css %}
<style>
.accent_color {
background-color: {{accent_color}} !important;
}
</style>
{% endblock %}
但是,这个块并没有像我预期的那样注入到 <head>
中。相反,它呈现在正文中,就像 {% block extra_css %}
标签根本不存在一样:
<head>
</head>
<body>
<style>
.accent_color {
background-color: {{accent_color}} !important;
}
</style>
</body>
仅仅是Django模板的限制吗?嵌套是问题吗?或者是因为我在模型级别使用自定义模板,而这在某种程度上超出了父模板解析的范围?
Django: 1.10
鹡鸰:1.6
这是 StreamField 块的自定义模板工作方式的限制。 (不过,Django 模板一般也有类似的限制 - {% block %}
机制只能与 {% extends %}
结合使用,而不是 {% include %}
。)块的 HTML 内容在对模板引擎的单独调用中呈现,独立于外部页面模板,因此无法在两者之间传递控制。
(请注意,Wagtail 1.6 引入了 {% include_block %}
标签,它可以将变量从外部模板的上下文传递到块模板,从而稍微改善了这种情况。它仍然不允许传递控制不过从一个到另一个。)