我有以下代码:
base.html文件
{this.props.children}
main_template.html
<html>
...
{% block test_block %}
{# Some stuff to render #}
{% endblock %}
...
</html>
plugin.html
{% extends "base.html" %}
...
{% block content %}
{% placeholder "content" %}
{% endblock %}
...
如果我将我的插件添加到页面中,它会按预期在占位符块中呈现。
如果我修改plugin.html以添加以下内容:
plugin.html
...
然后我收到一个错误:
'BlockNode'对象没有属性'context'。您是否在基本模板中使用了{{block.super}}?
如果我尝试在 plugin.html 中扩展main_template.html或CMS_TEMPLATE(它们似乎相同?),我会收到以下错误:
调用Python对象时超出了最大递归深度
如何从我的插件中访问和追加test_block?
答案 0 :(得分:2)
为了使用一个块,我相信你必须在一个模板中这样做,该模板从定义该块的模板扩展。
但是,要做你想做的事情,CMS会使用django-sekizai
。
使用此功能,您可以在base.html
;
{% load sekizai_tags %}
<html>
...
{% render_block "test_block" %}
...
</html>
然后在plugin.html
你可以做;
{% load sekizai_tags %}
{% addtoblock "test_block" %}
Add this to my block
{% endaddtoblock %}
这通常用于CSS&amp; JS阻止,但对你想要做的事情非常有效。