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

7

Я использую:

DjangoCMS 2.4Джанго 1.5.1Python 2.7.3

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


    {% placeholder "my_placeholder" or %}
    {% endplaceholder %}

Я неНе нужно создавать HTML-код между заполнителем, если заполнитель пуст.

{% if placeholder "my_placeholder" %}

    {% placeholder "my_placeholder" or %}
    {% endplaceholder %}

{% endif %}

Ваш Ответ

4   ответа
1

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

Так что вы'Я получил этот шаблон:

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

И этот CSS:

hide_if_empty:empty {
    display: none;
}

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

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
@ jmona789, это очень хорошо объясняется здесь:docs.djangoproject.com/en/2.2/howto/custom-template-tags Philipp Zedler
Это все еще нужно в 2019 году, или есть лучшие инструменты в настоящее время? это все еще работает, но интересно, если есть "встроенный» путь? benzkji
Пытаясь реализовать эту функцию самостоятельно, куда бы я поместил файл шаблона? jmona789
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 %}
Благодарю. Вы'мы только что сделали мой день 21S
Это's тег шаблона, поэтому вы должны создать папку с именемtemplatetags в одном из ваших приложений создайте файл (extra_cms_tags.py например) тогда в вашем шаблоне вызов{% load extra_cms_tags %} импортировать это Timmy O'Mahony
я новичок. Куда должен был положить файл? 21S
Дон»забыть добавить__init__.py на вашtemplatetags папка;). Увидетьпользовательские шаблоны тегов документации Больше подробностей. GabLeRoux
3

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

Пример:

{% placeholder "content" or %}

There is no content.

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

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