0
可能嗎?自定義模板運算符
我知道過濾器,但有可能創造這樣的事情:
{% if 75 is_divisible_by 5 %}
它只是看起來比更好了很多:
{% if 75|is_divisible_by:5 %}
(這是一個觀念問題,is_divisible_by是隻是一個例子)
可能嗎?自定義模板運算符
我知道過濾器,但有可能創造這樣的事情:
{% if 75 is_divisible_by 5 %}
它只是看起來比更好了很多:
{% if 75|is_divisible_by:5 %}
(這是一個觀念問題,is_divisible_by是隻是一個例子)
不,沒有辦法做你在問什麼。
(小心:切線)如果您只想渲染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的人可以告訴我們如何去做。
是的,我現在看到唯一的方法(afaik)是重寫if標籤。人們已經使用「智能if」標籤來完成這項工作http://djangosnippets.org/snippets/1350/ 它看起來可以修改爲添加is_divisible_by運算符。我會試一試。 – frnhr 2010-09-10 19:56:05