/ / Szablon tagu Django, który przyjmuje wartość logiczną i zwraca html - django, django-templates

Znacznik szablonu Django, który przyjmuje wartość logiczną i zwraca html - django, szablony django

Mam ten fragment HTML, który będzie używany w wielu miejscach.

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

Chcę napisać tag szablonu, który przyjmuje bool i zwraca <span class="label label-success">Complete</span> lub <span class="label label-important">Incomplete</span> w zależności od tego, czy argument jest True lub False który, jak sądzę, wygląda mniej więcej tak:

{% tf_label event.finished_payments%}

Alternatywnie, jest inny sposób na osiągnięcie tego za pomocą include tag szablonu i przekazać parametry?

Odpowiedzi:

3 dla odpowiedzi № 1

To powinno załatwić sprawę (nie przetestowano):

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

Ale myślę, używając {% if %} tag jest tutaj najlepszym pomysłem, jest bardziej czytelny. W każdym razie HTML powinien znajdować się w szablonach, a nie w kodzie Pythona.