我一直在努力让Jinja2定制扩展工作 - 当他们说写一个不是“平民”时,文档并不是在开玩笑 - 最终设法到达这个工作代码:定制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
正如我所说,这是现在的工作。我不确定的是为什么我需要返回nodes.CallBlock
在parse()
,而不是self.call_method()
(它返回一个nodes.Call
对象)。如果任何人有任何见解 - 或者可以指示我写一篇关于编写扩展的教程 - 请让我知道。
前段时间我写了一个Jinaj2扩展......并已经忘记了一切:) – zeekay 2011-05-12 02:50:13