如何从Django CMS占位符中的插件访问模板块

时间:2017-01-04 13:48:48

标签: django django-cms

我有以下代码:

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?

1 个答案:

答案 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阻止,但对你想要做的事情非常有效。