2017-03-03 86 views
0

我有一個xml模板,並使用jinja2模板引擎將數據載入到它中。我試圖驗證,在模板上的所有變量都提供:如何在python中獲取嵌套的未聲明變量jinja2

from jinja2 import Environment, PackageLoader, meta 
tmp = JinjaEnvironment().from_string(TEMPLATE) 
parsed_content = tmp.environment.parse(TEMPLATE) 
for key in meta.find_undeclared_variables(parsed_content): 
    if key not in data: 
     print 'Missing ', key 

的問題是,find_undeclared_variables方法不返回嵌套的變量。

For example if my data is {'main': {'age': 22, 'height': 6}, 'size': 10} 
then that method returns ['main', 'size'] 
but what I need is ['main.age', 'main'height', 'size'] 

目標是驗證所有變量都被替換。有任何想法嗎?

+0

在這裏可以使用[最小,完整,可驗證](http://stackoverflow.com/help/mcve)的例子。 –

回答

0

我發現,幫助包:jinja2schema

from jinja2schema import infer, model 
def test(self): 
    for key, val in infer(TEMPLATE).items(): 
     assert key in self.data, 'Missing {}'.format(key) 

     if type(val) == model.List: 
      for subkey in val.item.keys(): 
       assert subkey in self.data[key][0], 'Missing {}.{}'.format(key, subkey) 

     elif type(val) == model.Dictionary: 
      for subkey in val.keys(): 
       assert subkey in self.data[key], 'Missing {}.{}'.format(key, subkey)