如何从 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 块,但非常适合您想要做的事情。
我有以下代码:
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 块,但非常适合您想要做的事情。