繁体   English   中英

帮助定制Jinja2扩展

[英]Help with custom Jinja2 Extension

我一直在努力让这个Jinja2定制扩展工作 - 当他们说写一个不是为了“平民”时,文档并不是在开玩笑 - 最后设法得到了这个工作代码:

class WrapperExtension(Extension):

    tags = set(['wrap'])

    def parse(self, parser):
        lineno = parser.stream.next().lineno
        args = [parser.parse_expression()]
        args.append(nodes.Const(args[0].name))
        return nodes.CallBlock(
            self.call_method('_render', args),
            [], [], []).set_lineno(lineno)

    def _render(self, value, name, *args, **kwargs):
        if some_condition():
            return '<wrapper id="%s">%s</wrapper>' % (name, value)
        return value

正如我所说,这现在正在发挥作用。 我不确定的是为什么我需要在parse()返回nodes.CallBlock ,而不是self.call_method() (返回nodes.Call对象)。 如果有人有任何见解 - 或者可以指向我编写扩展的教程 - 请告诉我。

原因是parse()应该返回一个语句节点,例如CallBlockAssign call_method()返回一个表达式节点,您必须将其包装在CallBlock以获得语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM