/ / Balise de modèle Django qui prend une valeur booléenne et renvoie le code HTML - django, django-templates

Balise de modèle Django qui prend une valeur booléenne et renvoie le code HTML - django, django-templates

J'ai ce bout de code HTML qui va être utilisé à plusieurs endroits.

            {% if event.finished_payments %}
<span class="label label-success">Complete</span>
{% else %}
<span class="label label-important">Incomplete</span>
{% endif %}

Je veux écrire une balise de modèle qui prend un bool et retourne <span class="label label-success">Complete</span> ou <span class="label label-important">Incomplete</span> selon que l'argument est True ou False qui, je suppose, ressemble à ceci:

{% tf_label event.finished_payments%}

Alternativement, est une autre façon d'y parvenir en utilisant le include balise de modèle et passer des paramètres?

Réponses:

3 pour la réponse № 1

Cela devrait faire l'affaire (non testé):

from django import template

register = template.Library()

@register.simple_tag
def tf_label(request, complete):
if complete:
element = "<span class="label label-success">Complete</span>"
else
element = "<span class="label label-important">Incomplete</span>"

return element

2 pour la réponse № 2
{{ event.finished_payments|yesno:"<span class="label label-success">Complete</span>,<span class="label label-important">Incomplete</span>" }}

Mais il pense qu'en utilisant {% if %} la balise est la meilleure idée ici, elle est plus lisible. Quoi qu'il en soit, le HTML devrait vivre dans des modèles, pas dans du code Python.