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

标签 python css django templates wagtail

我的基本模板的头部有一个 block ,它将呈现“额外”的 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 %}

bodyStreamField在鹡鸰。所述字段之一是自定义字段 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模板,我正在尝试渲染 <style> 应该被注入(inject)到我的extra_css中的标签 block :

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

但是,这个 block 没有注入(inject)到<head>中正如我所料。相反,它在正文中呈现,就像这样,就好像 {% block extra_css %}标签根本不存在:

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

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

Django:1.10
鹡鸰:1.6

最佳答案

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

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

关于python - Wagtail/Django block 无法从自定义/嵌套 StructBlock 模板正确呈现内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38956897/

相关文章:

python - 使用 python 重复条目求和到 K

python - 制作一个包含 3 个 python 代码的脚本

python - Keras 提前停止回调错误,val_loss 指标不可用

html - IE 8 兼容模式下的边框折叠问题

python - 有没有办法在 Python 中构造惰性序列?

django - 更改 Django admin 的用户 ModelAdmin

django - http 403 错误 + "readv() failed (104: Connection reset by peer) while reading upstream"

Python 3.2 问题

CSS如何在当前帧的mouseout上恢复SVG动画

javascript - jQuery 将 css 类应用于下一个单个元素