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