2024-05-15 23:32:20 发布
网友
我试着给金贾二号做分机。我写过这样的代码:
http://dumpz.org/12996/
但我收到异常:'NoneType' object is not iterable。虫子在哪里? 它应该返回parse。还有什么应该接受并返回_media?在
'NoneType' object is not iterable
parse
_media
您使用的是CallBlock,这表示您希望您的扩展充当块。E、 g
CallBlock
{% mytest arg1 arg2 %} stuff in here {% endmytest %}
nodes.CallBlock要求您向它传递一个节点列表,该列表表示扩展的主体(内部语句)。目前这是您传递None的地方,因此出现了错误。在
nodes.CallBlock
None
解析完参数后,需要继续解析块的主体。幸运的是,这很简单。您只需:
然后返回一个新节点。CallBlock接收要调用的方法(在本例中是_mytestfunc),该方法为您的扩展提供逻辑。在
_mytestfunc
body = parser.parse_statements(['name:endmytest'], drop_needle=True) return nodes.CallBlock(self.call_method('_mytestfunc', args),[], [], body).set_lineno(lineno)
或者,如果您不希望您的扩展名是块标记,例如
{% mytest arg1 arg2 %}
您不应该使用nodes.CallBlock,而应该使用nodes.Call,它不接受body参数。所以就这么做吧:
nodes.Call
return self.call_method('_mytestfunc', args)
self.call_method只是一个方便的包装函数,它为您创建一个调用节点。在
self.call_method
我花了几天时间编写了Jinja2扩展,这很棘手。没有多少文档(除了代码)。coffin-GitHub项目有几个扩展here的例子。在
您使用的是
CallBlock
,这表示您希望您的扩展充当块。E、 gnodes.CallBlock
要求您向它传递一个节点列表,该列表表示扩展的主体(内部语句)。目前这是您传递None
的地方,因此出现了错误。在解析完参数后,需要继续解析块的主体。幸运的是,这很简单。您只需:
^{pr2}$然后返回一个新节点。
CallBlock
接收要调用的方法(在本例中是_mytestfunc
),该方法为您的扩展提供逻辑。在或者,如果您不希望您的扩展名是块标记,例如
您不应该使用
nodes.CallBlock
,而应该使用nodes.Call
,它不接受body参数。所以就这么做吧:self.call_method
只是一个方便的包装函数,它为您创建一个调用节点。在我花了几天时间编写了Jinja2扩展,这很棘手。没有多少文档(除了代码)。coffin-GitHub项目有几个扩展here的例子。在
相关问题 更多 >
编程相关推荐