在Django的模板中是否有更简单/更短的方法来过滤这种代码?

时间:2012-03-27 22:03:06

标签: django django-templates django-template-filters

在我的模板中,我有

Vendor:
    {% if order.vendor %}
        {{ order.vendor.name }}
    {% else %}
        Not assigned yet.
    {% endif %}<br />
Quote:
    {% if order.quote %}
        ${{ order.quote }}
    {% else %}
        No quote yet.
    {% endif %}<br />

我知道我可能会使用{{ value|default:"nothing" }}做一个更简单的版本,但是如何适用于带引号的第二种情况?因为默认版本也应该隐藏$。否则会说$No quote yet.。嗯...也许有一种方法可以将Django的humanize框架与$符号一起使用?

2 个答案:

答案 0 :(得分:1)

这取决于您为order.quote存储值的方式,我可能会亲自使用自定义过滤器进行处理,并将其替换为{{ order.quote|currency|default:"No quote yet" }}

之类的内容

货币是定义的模板过滤器(大致),如:

import decimal
@register.filter
def currency(val):)
    try:
        return '$%s' % cents / decimal.Decimal(100.00)
    except TypeError:
        return ''

这当然假设您将引号存储为整数而不是浮点数。对于非美国价值观,也可能会引入一些本地化

答案 1 :(得分:0)

你已经以正确的方式做到了。