/ / Tag de modelo do Django que recebe um booleano e retorna html - django, django-templates

Tag de template do Django que recebe um booleano e retorna html - django, django-templates

Eu tenho esse pouco de HTML que será usado em vários lugares.

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

Eu quero escrever uma tag de modelo que receba um bool e retorne <span class="label label-success">Complete</span> ou <span class="label label-important">Incomplete</span> dependendo se o argumento é True ou False que suponho que algo parecido com isto:

{% tf_label event.finished_payments%}

Como alternativa, é outra maneira de conseguir isso usando o include tag de modelo e passar parâmetros?

Respostas:

3 para resposta № 1

Isso deve fazer o truque (não testado):

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 para resposta № 2
{{ event.finished_payments|yesno:"<span class="label label-success">Complete</span>,<span class="label label-important">Incomplete</span>" }}

Mas acho que, usando {% if %} tag é a melhor idéia aqui, é mais legível. De qualquer forma, o HTML deve estar em modelos, não no código Python.