自定义模板运算符
Posted
技术标签:
【中文标题】自定义模板运算符【英文标题】:custom template operator 【发布时间】:2011-04-10 09:49:41 【问题描述】:有可能吗?
我知道过滤器,但是可以创建这样的东西吗:
% if 75 is_divisible_by 5 %
它看起来比:
% if 75|is_divisible_by:5 %
(这是一个概念问题,is_divisible_by 只是一个例子)
【问题讨论】:
【参考方案1】:不,没有办法按照您的要求进行操作。
(注意:切线)但是,如果您只想呈现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”标签 djangosnippets.org/snippets/1350 完成了此操作,看起来可以修改为添加 is_divisible_by 运算符。我试试看。以上是关于自定义模板运算符的主要内容,如果未能解决你的问题,请参考以下文章