自定义模板运算符

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 运算符。我试试看。

以上是关于自定义模板运算符的主要内容,如果未能解决你的问题,请参考以下文章

在自定义模板标签中解析 Django 自定义模板标签

Django自定义模板函数

齐博CMS:怎样制作并添加自定义标签模板样式

WPF 自定义列表筛选 自定义TreeView模板 自定义ListBox模板

VUE使用富文本自定义打印模板

无法创建自定义管理模板 url,出现错误模板错误和创建自定义管理站点错误