Django模板标记,它接受一个布尔值并返回html

时间:2012-05-22 08:35:09

标签: django django-templates

我有一些HTML将在多个地方使用。

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

我想写一个模板标签,它接受一个bool并返回<span class="label label-success">Complete</span><span class="label label-important">Incomplete</span>,具体取决于参数是True还是False我认为看起来像什么像这样:

{%tf_label event.finished_pa​​yments%}

或者,是使用include模板标记和传入参数实现此目的的另一种方法吗?

2 个答案:

答案 0 :(得分:3)

这应该可以解决问题(未经测试):

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

答案 1 :(得分:2)

{{ event.finished_payments|yesno:"<span class='label label-success'>Complete</span>,<span class='label label-important'>Incomplete</span>" }}

但它认为,使用{% if %}标签是最好的主意,它更具可读性。无论如何,HTML应该存在于模板中,而不是Python代码中。