2013-06-17 24 views
6

używam:Django CMS - sprawdź czy zastępczy jest pusty

  • DjangoCMS 2,4
  • Django 1.5.1
  • Python 2.7.3

Chciałbym sprawdzić, czy mój zastępczy jest pusty.

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

Nie chcę, aby html pomiędzy symbolem zastępczym został utworzony, jeśli symbol zastępczy jest pusty.

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

Odpowiedz

14

Nie ma wbudowanego sposobu, aby to zrobić w tej chwili w django-cm, więc musisz napisać niestandardowy znacznik szablonu. Istnieją pewne stare dyskusje na ten temat na django-cms Google Grupa:

podstawie kodu w pierwszej dyskusji, mam ułożył następujący dokument Gist:

używam go tak:

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

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

Jestem początkujący. Gdzie powinien był umieścić plik? – 21S

+3

Jest to tag szablonu, więc musisz utworzyć folder o nazwie 'templatetags' w jednej ze swoich aplikacji, utworzyć plik (na przykład" extra_cms_tags.py "), a następnie w szablonie wywołać' {% load extra_cms_tags%} ', aby go zaimportować –

+0

Dzięki. Właśnie skończyłeś mój dzień. – 21S

0

Oto bardzo kompaktowe rozwiązanie.

filtr Szablon:

@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 

Wykorzystanie w szablonie:

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

Jeśli chcesz dodatkowe treści mają być wyświetlane w przypadku zastępczy jest pusty, należy użyć or argument i dodatkowa {% endplaceholder %} tag zamykający . Wszystko pomiędzy {% placeholder "..." or %} i {% endplaceholder %} jest renderowane w przypadku, gdy symbol zastępczy nie ma wtyczek lub wtyczki nie generują żadnych wyników.

Przykład:

{% placeholder "content" or %} 

There is no content. 

{% endplaceholder %} 
+0

To powinna być poprawna odpowiedź. Super prosty i nie wymaga znaczników szablonów. –

+1

To jest świetne, ale nie pozwala wyświetlać treści HTML tylko wtedy, gdy symbol zastępczy nie jest pusty. – Flimm

0

W zależności od tego, co staramy się osiągnąć, można po prostu użyć CSS, aby ukryć element, jeśli nie ma treści za pomocą wybieraka :empty. A jeśli martwisz się o białe przestrzenie, możesz użyć wbudowanego znacznika szablonu Django, aby je usunąć.

Więc można dostać ten szablon:

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

i to CSS:

hide_if_empty:empty { 
    display: none; 
} 

Nie dokładnie to, co zostało hasła, gdyż nie usuwa HTML - ale to rozwiąże najczęstszy przypadek, w którym chce się sprawdzić, czy miejsce właściciela jest puste i nie wymaga wprowadzenia nowego znacznika szablonu.