2017-09-29 3 views
0

템플릿에 사용 된 변수를 찾으려면 jinja2.meta.find_undeclared_variables을 사용하고 있습니다. 그러나 인식 할 수없는 필터가있는 경우 TemplateAssertionError으로 실패합니다.meta.find_undeclared_variables를 수행 할 때 "TemplateAssertionError : no filter named"를 무시하십시오.

jinja2에게 이러한 오류를 무시하고 변수 목록을 돌려 줄 수있는 방법이 있습니까? 아래 그리고 위처럼 사용할 수 있습니다

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 _ 

을 meta.find_undeclared_variables 유사한 결과를 제공 파이썬 2 코드 -

답변

0

나는 구문 분석 템플릿 객체 내의 모든 이름의 노드를 찾아 작은 해결 방법을 쓰기 결국 이 :

from jinja2 import Environment 
env = Environment() 
ast = env.parse(your_template_string) 
print find_variables_in_document(ast.body)