Вопрос по html, python, django, django-cms – Django CMS - проверить, если заполнитель пуст

7

Я использую:

DjangoCMS 2.4Джанго 1.5.1Python 2.7.3

Я хотел бы проверить, если мой заполнитель пуст.

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

Я не хочу, чтобы HTML-код между заполнителем создавался, если заполнитель пуст.

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

Ваш Ответ

4   ответа
1

Фильтр шаблона:

@register.filter('placeholder_is_empty')
def placeholder_is_empty(request, slot):
    page = request.current_page
    placeholder = page.placeholders.get(slot=slot)
    number_of_cmsplugins = placeholder.cmsplugin_set.count()
    return number_of_cmsplugins == 0

Использование в шаблоне:

{% if request|placeholder_is_empty:'myplaceholder' %}
    <h1>Here comes some content... </h1>
{% endif %}
Почему бы не вернуть placeholder.cmsplugin_set.exists ()? jabez
1

чего вы пытаетесь достичь, вы можете просто использовать CSS, чтобы скрыть элемент, если у него нет контента, используя: пусто селектор. И если вы беспокоитесь о пробелах, вы можете использовать встроенный Django{% spaceless%} Шаблон тега для их удаления.

Таким образом, вы получите этот шаблон:

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

И этот CSS:

hide_if_empty:empty {
    display: none;
}

Не совсем то, о чем просили, поскольку он не удаляет HTML - но это решит наиболее распространенный случай, когда нужно проверить, не заполнен ли заполнитель, и не требуется ввод нового тега шаблона.

3

чтобы дополнительный контент отображался, если заполнитель пуст, используйтеor аргумент и дополнительный{% endplaceholder %} закрывающий тег Все между{% placeholder "..." or %} а также{% endplaceholder %} отображается в том случае, если заполнитель не имеет плагинов или плагины не генерируют никакого вывода.

Пример:

{% placeholder "content" or %}

There is no content.

{% endplaceholder %}
Это должен быть правильный ответ. Супер просто и не требует шаблонных тегов. Mark Anderson
Это замечательно, но не позволяет выводить контент HTML, только если заполнитель не пуст. Flimm
15

поэтому вам нужно написать собственный тег шаблона. Есть несколько старых дискуссий по этому поводу наdjango-cms Группа Google:

https://groups.google.com/forum/#!topic/django-cms/WDUjIpSc23c/discussionhttps://groups.google.com/forum/#!msg/django-cms/iAuZmft5JNw/yPl8NwOtQW4Jhttps://groups.google.com/forum/?fromgroups=#!topic/django-cms/QeTlmxQnn3Ehttps://groups.google.com/forum/#!topic/django-cms/2mWvEpTH0ns/discussion

Основываясь на коде в первом обсуждении, я собрал следующую суть:

https://gist.github.com/timmyomahony/5796677

Я использую это так:

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

{% if my_placeholder %}
<div>
    {{ my_placeholder }}
</div>
{% endif %}
Это тег шаблона, поэтому вы должны создать папку с именемtemplatetags в одном из ваших приложений создайте файл (extra_cms_tags.py например) тогда в вашем шаблоне вызов{% load extra_cms_tags %} импортировать это Timmy O'Mahony
Я новичок Куда должен был положить файл? 21S
Благодарю. Вы только что сделали мой день. 21S
Не забудьте добавить__init__.py на вашtemplatetags папка;). Видетьпользовательские шаблоны тегов документации Больше подробностей. GabLeRoux

Похожие вопросы