Jinja2扩展 - 获取传递给扩展的变量的值

时间:2014-02-21 03:00:00

标签: python jinja2

所以我有一个Jinja2扩展名。基本上遵循解析器逻辑,除了我需要从传入的解析args中获取值。

例如,如果我有一个名为loadfile的扩展名,并将其传递给变量:

{% loadfile "file.txt" %}

当我通过parser.parse_expression()获取参数时,我得到一个node.Const变量,其中.value参数为file.txt,我可以得到名称{% set filename = "file.txt" %} {% loadfile filename %} 没问题。

...然而

node.Name

导致我的问题。解析器为我提供了一个.value expr节点,它既不响应as_const(...),也不响应所有其他节点响应的node.Name调用。

我无法弄清楚如何评估我从解析参数得到的file.txt节点的值,因此无法获得名称{{1}}。

有没有一种很好的方法来解析扩展中的参数变量/值,以便我可以使用它们来执行扩展?

谢谢!

1 个答案:

答案 0 :(得分:1)

这对我有用

def parse(self, parser):
    lineno = parser.stream.next().lineno

    # args will contains filename
    args = [parser.parse_expression()]

    return nodes.Output([
        nodes.MarkSafeIfAutoescape(self.call_method('handle', args))
    ]).set_lineno(lineno)

def handle(self, filename):
    # bla-bla-bla