2010-09-09 68 views
0

可能吗?自定义模板运算符

我知道过滤器,但有可能创造这样的事情:

{% if 75 is_divisible_by 5 %} 

它只是看起来比更好了很多:

{% if 75|is_divisible_by:5 %} 

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

回答

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条件相结合的方法。也许有更好的模板标签fu的人可以告诉我们如何去做。

+0

是的,我现在看到唯一的方法(afaik)是重写if标签。人们已经使用“智能if”标签来完成这项工作http://djangosnippets.org/snippets/1350/ 它看起来可以修改为添加is_divisible_by运算符。我会试一试。 – frnhr 2010-09-10 19:56:05