2017-09-29 17 views
0

jinja2.meta.find_undeclared_variablesを使用してテンプレートで使用される変数を検索しています。ただし、認識できないフィルタがある場合はTemplateAssertionErrorで失敗しています。meta.find_undeclared_variablesを実行しているときに「TemplateAssertionError:no filter named」を無視します。

jinja2にこれらのエラーを無視して変数のリストを返すように指示する方法はありますか?

答えて

0

Iが解析テンプレートオブジェクト内のすべての名前のノードを見つけるために小さな回避策を書き込み終わった - 以下はmeta.find_undeclared_variables

def find_variables_in_document(body_list): 
    variables = set() 
    for body in body_list: 
     variables.update(set(find_variables(body))) 
    return sorted(variables) 


def find_variables(obj): 
    if hasattr(obj, '__dict__'): 
     if type(obj) is jinja2.nodes.Name: 
      yield obj.name 
     else: 
      for attribute, value in vars(obj).iteritems(): 
       if isinstance(value, jinja2.nodes.Node): 
        for _ in find_variables(value): 
         yield _ 
       if type(value) == list: 
        for item in value: 
         for _ in find_variables(item): 
          yield _ 

と同様の結果が得られるのPython 2のコードは次に、上記のように使用することが可能ですこれは:

from jinja2 import Environment 
env = Environment() 
ast = env.parse(your_template_string) 
print find_variables_in_document(ast.body) 
関連する問題