我有以下代码:
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
...
如果我将插件添加到它在占位符 block 中呈现的页面,正如预期的那样。
如果我修改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?
最佳答案
为了使用 block ,我相信,您必须在从定义该 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 block ,但非常适合您想要做的事情。
关于django - 如何从 Django CMS Placeholder 中的插件访问模板 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41465390/