所以我有一个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}}。
有没有一种很好的方法来解析扩展中的参数变量/值,以便我可以使用它们来执行扩展?
谢谢!
答案 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