Python Django CMS-检查占位符是否为空
我使用:Python Django CMS-检查占位符是否为空,python,html,django,django-cms,Python,Html,Django,Django Cms,我使用: DjangoCMS 2.4 Django 1.5.1 Python 2.7.3 我想检查我的占位符是否为空 <div> {% placeholder "my_placeholder" or %} {% endplaceholder %} </div> {% if placeholder "my_placeholder" %} <div> {% placeholder "my_placeholder" or %}
- DjangoCMS 2.4
- Django 1.5.1
- Python 2.7.3
<div>
{% placeholder "my_placeholder" or %}
{% endplaceholder %}
</div>
{% if placeholder "my_placeholder" %}
<div>
{% placeholder "my_placeholder" or %}
{% endplaceholder %}
</div>
{% endif %}
{%占位符“我的占位符”或%}
{%endplaceholder%}
如果占位符为空,我不希望在占位符之间创建html
<div>
{% placeholder "my_placeholder" or %}
{% endplaceholder %}
</div>
{% if placeholder "my_placeholder" %}
<div>
{% placeholder "my_placeholder" or %}
{% endplaceholder %}
</div>
{% endif %}
{%if占位符“my_占位符”%}
{%占位符“我的占位符”或%}
{%endplaceholder%}
{%endif%}
目前django cms中没有内置的方法来实现这一点,因此您必须编写自定义模板标记。在django cms
Google小组中有一些关于这一点的老讨论:
{% load extra_cms_tags %}
{% get_placeholder "My Placeholder" as my_placeholder %}
{% if my_placeholder %}
<div>
{{ my_placeholder }}
</div>
{% endif %}
{%load extra\u cms\u tags%}
{%get_placeholder“My placeholder”作为My_placeholder%}
{%if我的_占位符%}
{{my_占位符}}
{%endif%}
这是一个非常紧凑的解决方案
模板筛选器:
@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 %}
{% spaceless %}
<div class="hide_if_empty">
{% placeholder "my_placeholder" %}
</div>
{% endspaceless %}
{%如果请求|占位符_为空:'myplaceholder'%}
这里有一些内容。。。
{%endif%}
如果要在占位符为空的情况下显示其他内容,请使用或
参数和其他{%endplaceholder%}
结束标记。如果占位符没有插件或插件没有生成任何输出,则呈现{%endplaceholder“…”或%}
和{%endplaceholder%}
之间的所有内容
例如:
{% placeholder "content" or %}
There is no content.
{% endplaceholder %}
根据您试图实现的目标,如果使用选择器没有内容,您可以简单地使用CSS隐藏元素。如果您担心空白,可以使用Django的内置模板标记来删除它们 因此,您将获得以下模板:
{% if request|placeholder_is_empty:'myplaceholder' %}
<h1>Here comes some content... </h1>
{% endif %}
{% spaceless %}
<div class="hide_if_empty">
{% placeholder "my_placeholder" %}
</div>
{% endspaceless %}
这并不完全符合要求,因为它不会删除HTML-但这将解决最常见的情况,即需要检查占位符是否为空,并且不需要引入新的模板标记。基于伟大的答案表单@Philip Zedler,这是一种适用于django cms页面上两个占位符的解决方案,但也在“cms之外”的占位符上 模板中的用法
{% if request.current_page|placeholder_empty:'content' %}
<h1>Fallback!</h1>
{% endif %}
{%if请求。当前页面|占位符_为空:'content'%}
退路!
{%endif%}
这是我的我是初学者。文件应该放在哪里?它是一个模板标签,因此您必须在一个应用程序中创建一个名为
templatetags
的文件夹,创建一个文件(extra\u cms\u tags.py
),然后在模板中调用{%load extra\u cms\u tags%}
导入它。您刚刚成为我的一天。别忘了将\uuuu init\uuuuuuuuy.py
添加到您的templatetags
文件夹中。有关更多详细信息,请参阅。如果您继续滚动,则会有一个更好的答案:这应该是正确的答案。超级简单,不需要模板标记。这很好,但它不允许您仅在占位符不为空时输出HTML内容。@Flimm我不确定您在哪个版本中尝试过,但它没有这样做,但是在django cms==3.4.6
上,它就像一个符咒:只有当占位符为空时,标签之间的内容才会出现。为什么不返回占位符.cmsplugin_set.exists()?2019年还需要这个,还是现在有更好的工具?它仍然有效,但想知道是否有一种“内置”方式?是的,@jabez,exists()更好。我已经编辑了我的答案。为了自己实现这个功能,我应该把模板过滤器文件放在哪里?@jmona789,这里有很好的解释: