Django CMS - 检查占位符是否为空

21S*_*21S 8 html python django django-cms

我用:

  • DjangoCMS 2.4
  • Django 1.5.1
  • Python 2.7.3

我想检查我的占位符是否为空.

<div>
    {% placeholder "my_placeholder" or %}
    {% endplaceholder %}
</div>
Run Code Online (Sandbox Code Playgroud)

如果占位符为空,我不希望创建占位符之间的html.

{% if placeholder "my_placeholder" %}
<div>
    {% placeholder "my_placeholder" or %}
    {% endplaceholder %}
</div>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

Tim*_*ony 17

目前在django-cms中没有内置的方法来执行此操作,因此您必须编写自定义模板标记.django-cms谷歌集团对此有一些陈旧的讨论:

根据第一次讨论中的代码,我将以下要点放在一起:

我这样使用它:

{% load extra_cms_tags %}
{% get_placeholder "My Placeholder" as my_placeholder %}

{% if my_placeholder %}
<div>
    {{ my_placeholder }}
</div>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

  • 它是一个模板标签,所以你必须在你的一个应用程序中创建一个名为`templatetags`的文件夹,创建一个文件(例如`extra_cms_tags.py`)然后在模板中调用`{%load extra_cms_tags%}`来导入它 (3认同)

Ash*_*pta 6

如果您希望在占位符为空的情况下显示附加内容,请使用or参数和附加{% endplaceholder %}结束标记。如果占位符没有插件或插件不生成任何输出{% placeholder "..." or %}{% endplaceholder %}则呈现和之间的所有内容。

例子:

{% placeholder "content" or %}

There is no content.

{% endplaceholder %}
Run Code Online (Sandbox Code Playgroud)

  • 这很好,但它不允许您仅在占位符不为空时输出 HTML 内容。 (5认同)

Phi*_*ler 5

这是一个非常紧凑的解决方案。

模板过滤器:

@register.filter('placeholder_is_empty')
def placeholder_is_empty(request, slot):
    page = request.current_page
    placeholder = page.placeholders.get(slot=slot)
    return placeholder.cmsplugin_set.exists()
Run Code Online (Sandbox Code Playgroud)

模板中的用法:

{% if request|placeholder_is_empty:'myplaceholder' %}
    <h1>Here comes some content... </h1>
{% endif %}
Run Code Online (Sandbox Code Playgroud)