2011-05-19 2 views
2

Je veux essentiellement de faire quelque chose comme ça dans mon modèle de base:Comment puis-je envelopper un bloc dans jinja2

{% if the block 'headline' is not empty %} 
<div class="something"><h1>{% block headline %}{% end block %}</h1></div> 
{% endif %} 

En jinja2 il bloque apparaît ne sont pas des variables et vous ne pouvez pas obtenir à leur contenu ou de test leurs valeurs, ou toute autre chose, mais les produire.

Cela semble être une évidence, mais je n'arrive pas à trouver un moyen. Dois-je utiliser des macros au lieu de blocs?

Répondre

4

Vous devriez pouvoir vérifier le contenu d'un bloc en utilisant la syntaxe self.blockname.

{% if self.headline() is not empty %} 
{# Write out Headline HTML wrapper here #} 
{% endif %} 

Pour citer the documentation:

Si vous souhaitez imprimer un bloc plusieurs fois, vous pouvez cependant utiliser la variable auto spéciale et appeler le bloc avec ce nom:

<title>{% block title %}{% endblock %}</title> 
<h1>{{ self.title() }}</h1> 
{% block body %}{% endblock %} 
+2

J'ai utilisé ceci pour ajouter un tuyau dans un titre de page si un titre de contenu a été fourni: ' {% block content_title%} {% endblock%} {% si self.content_title()%} | {% endif%} {{SITENAME}} '. Espérons que cela soit plus clair pour l'utiliser dans une instruction if. – Treffynnon

+0

@Treffynnon C'était exactement ce que je recherchais pour savoir comment faire. Merci! – vergenzt

Questions connexes