如何从 Django CMS Placeholder 中的插件访问模板块

How to access template block from plugin within Django CMS Placeholder

我有以下代码:

base.html

<html>
...
{% block test_block %}
    {# Some stuff to render #}
{% endblock %}
...
</html>

main_template.html

{% extends "base.html" %}    
...
{% block content %}
    {% placeholder "content" %}
{% endblock %}
...

plugin.html

...

如果我将我的插件添加到它在占位符块中呈现的页面,如预期的那样。

如果我修改plugin.html添加以下内容:

plugin.html

...
{% block test_block %}
    {{ block.super }}
    {# Some more stuff to render #}
{% endblock %}
...

然后我收到一个错误:
'BlockNode' 对象没有属性 'context'。您是否在基本模板中使用了 {{ block.super }}?

如果我尝试从 plugin.html 中扩展 main_template.html 或 CMS_TEMPLATE(它们似乎相同?)我得到以下错误:
调用 Python 对象时超出最大递归深度

如何从我的插件中访问和附加到 test_block?

我相信,为了使用块,您必须在从定义该块的模板扩展的模板中执行此操作。

但是,为了满足您的需求,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 和 JS 块,但非常适合您想要做的事情。