定制模板运算符

时间:2010-09-09 18:11:42

标签: django templates django-templates

有可能吗?

我知道过滤器,但是可以创建这样的东西:

{% if 75 is_divisible_by 5 %}

它看起来比看起来好很多:

{% if 75|is_divisible_by:5 %}

(这是一个概念问题,is_divisible_by只是一个例子)

1 个答案:

答案 0 :(得分:0)

不,没有办法做你要问的事。

(注意:切向)但是,如果您只想呈现is_divisible_by 75 5的值,则可以定义自定义模板标记。像这样:

@register.tag('is_divisible_by')
def is_divisible_by(_parser, token):
    try:
        _tag_name, dividend, divisor = token.split_contents()
    except ValueError:
        raise template.TemplateSyntaxError, \ 
            "%r tag requires exactly two arguments" % token.contents.split()[0]

    return IsDivisibleBynode(dividend, divisor)

class IsDivisibleBynode(template.Node):
    def __init__(self, dividend, divisor):
        self.dividend = template.Variable(dividend)
        self.divisor = template.Variable(divisor)

    def render(self, context):
        return (int(self.dividend.literal)  % int(self.divisor.literal) == 0)

然后可以在这样的模板中使用它:

<p>{% is_divisible_by 75 5 %}</p>

当然,这只会打印True而不是您需要的内容。我找不到将其与if条件相结合的方法。也许拥有更好模板标签的人可以告诉我们如何做到这一点。