django - 如何从 Django CMS Placeholder 中的插件访问模板 block

标签 django django-cms

我有以下代码:

base.html

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

ma​​in_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/

相关文章:

django - 获取 Django 模型中下一个对象的 id

django-cms - Django CMS,每页 CSS 样式

python - Django-cms错误 "unsupported operand type(s) for +: '设置'和 'tuple'“

django - 开发 django-cms 下拉菜单

django-cms - 将内容类型添加到 django-cms

css - 我应该如何使用 Bootstrap 设置 Django 验证错误的样式?

python - Django - 重叠日期范围的表单验证

django - 在 Django 中运行 migrate 时出现 InvalidBasesError

Django - 从 Django 模板访问外键的管理器

python - Django ORM 魔法。错误还是功能?