2010-09-09 66 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