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

问题描述 投票:8回答:4

我用:

  • DjangoCMS 2.4
  • Django 1.5.1
  • Python 2.7.3

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

<div>
    {% placeholder "my_placeholder" or %}
    {% endplaceholder %}
</div>

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

{% if placeholder "my_placeholder" %}
<div>
    {% placeholder "my_placeholder" or %}
    {% endplaceholder %}
</div>
{% endif %}
python html django django-cms
4个回答
16
投票

目前在django-cms中没有内置的方法来执行此操作,因此您必须编写自定义模板标记。关于django-cms Google Group的一些旧讨论:

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

我这样使用它:

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

{% if my_placeholder %}
<div>
    {{ my_placeholder }}
</div>
{% endif %}

3
投票

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

例:

{% placeholder "content" or %}

There is no content.

{% endplaceholder %}

3
投票

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

模板过滤器:

@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()

模板中的用法:

{% if request|placeholder_is_empty:'myplaceholder' %}
    <h1>Here comes some content... </h1>
{% endif %}

1
投票

根据您要实现的目标,如果没有使用:empty选择器的内容,您可以简单地使用CSS隐藏元素。如果你担心白色空间,你可以使用Django的内置{% spaceless %}模板标签来删除它们。

所以你得到这个模板:

{% spaceless %}
<div class="hide_if_empty">
    {% placeholder "my_placeholder" %}
</div>
{% endspaceless %}

这个CSS:

hide_if_empty:empty {
    display: none;
}

不完全是因为它没有删除HTML - 但这将解决最常见的情况,即人们想要检查占位符是否为空,并且不需要引入新的模板标记。

© www.soinside.com 2019 - 2024. All rights reserved.