2013-06-17 2 views
6

я использую:Django CMS - проверить, если заполнитель пуст

  • 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 %} 

ответ

14

Там нет встроенного способа сделать это в настоящий момент в Джанго-СХ, так что вы должны написать пользовательский тег шаблона. Есть некоторые старые дискуссии по этому поводу на django-cms Google группы:

на основе кода в первой дискуссии, я имею собрал следующую таблицу:

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

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

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

Я новичок. Где должен был поместить файл? – 21S

+3

Это тег шаблона, поэтому вам нужно создать папку под названием templatetags в одном из ваших приложений, создать файл (например, extra_cms_tags.py), а затем в шаблоне вызывать '{% load extra_cms_tags%}', чтобы импортировать его –

+0

Спасибо. Ты только что сделал свой день. – 21S

0

Вот очень компактное решение.

Шаблон фильтра:

@register.filter 
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 %} 
3

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

Пример:

{% placeholder "content" or %} 

There is no content. 

{% endplaceholder %} 
+0

Это должен быть правильный ответ. Супер простой и не требует шаблонных тегов. –

+1

Это замечательно, но он не позволяет выводить HTML-контент только в том случае, если местозаполнитель не пуст. – Flimm

0

В зависимости от того, что вы пытаетесь достичь, вы можете просто использовать CSS, чтобы скрыть элемент, если не имеет содержимого с помощью селектора :empty. И если вы беспокоитесь о белых пространствах, вы можете использовать шаблон шаблона шаблона Django in-build {% spaceless %}, чтобы удалить их.

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

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

И это CSS:

hide_if_empty:empty { 
    display: none; 
} 

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

Смежные вопросы