2013-06-17 11 views
6

io uso:Django CMS - controllare se segnaposto è vuoto

  • DjangoCMS 2.4
  • Django 1.5.1
  • Python 2.7.3

Vorrei verificare se il mio segnaposto è vuoto.

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

Non voglio che l'html tra il segnaposto venga creato se il segnaposto è vuoto.

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

risposta

14

Non c'è modo integrato per effettuare questa operazione nel momento in django-CMS, in modo da avere per scrivere un tag modello personalizzato. Ci sono alcune vecchie discussioni su questo su Google Gruppo django-cms:

Sulla base del codice nella prima discussione, ho mettere insieme il seguente Gist:

lo uso in questo modo:

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

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

Sono un principiante. Dove dovrebbe essere messo il file? – 21S

+3

È un tag modello quindi devi creare una cartella chiamata 'templatetags' in una delle tue applicazioni, creare un file (' extra_cms_tags.py' per esempio) quindi nel tuo modello chiama '{% load extra_cms_tags%}' per importarlo –

+0

Grazie. Hai appena fatto la mia giornata. – 21S

0

Ecco una soluzione molto compatta.

filtro Template:

@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 

Uso in Template:

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

Se si desidera ulteriori contenuti da visualizzare nel caso in cui il segnaposto è vuota, utilizzare l'argomento or e un ulteriore {% endplaceholder %} tag di chiusura . Tutto tra {% placeholder "..." or %} e {% endplaceholder %} viene visualizzato nel caso in cui il segnaposto non abbia plug-in o i plugin non generano alcun output.

Esempio:

{% placeholder "content" or %} 

There is no content. 

{% endplaceholder %} 
+0

Questa dovrebbe essere la risposta corretta. Super semplice e non richiede tag modello. –

+1

Questo è ottimo, ma non consente di stampare contenuti HTML solo se il segnaposto non è vuoto. – Flimm

0

seconda di cosa si sta cercando di ottenere, si può semplicemente utilizzare i CSS per nascondere l'elemento se non ha contenuto utilizzando il selettore :empty. E se sei preoccupato per gli spazi bianchi puoi usare il tag modello di Django in-build {% spaceless %} per rimuoverli.

Così si otterrebbe questo modello:

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

E questo CSS:

hide_if_empty:empty { 
    display: none; 
} 
Non

esattamente ciò che è stato chiesto perché non rimuove il codice HTML - ma questo risolverà il caso più comune in cui si desidera verificare se un segnaposto è vuoto e non richiede l'introduzione di un nuovo tag modello.