2013-01-15 22 views
1

我需要獲取模板上下文所需的變量列表,以便能夠向使用my service的程序員提供一些反饋。如何讀取Jinja2模板並獲取需要變量的列表以呈現它?

我該怎麼做?

我正在考慮給出一個上下文對象,當模板嘗試訪問它時會創建變量,然後在渲染後給我上下文對象中的變量列表。

這可能嗎?

+0

的你爲什麼不提供一個變量「varnames」,並傳達給模板設計者,他們可以用它來看看增加可用的變量。 – XORcist

+1

因爲我只有模板內容才能獲取此信息。 – Natim

+0

你可能會運用monkeypatching上下文對象的'resolve'方法。 – XORcist

回答

5

使用Jinja2的meta api

from jinja2 import Environment, FileSystemLoader,meta 

PATH = os.path.dirname(os.path.abspath(__file__)) #get the path of current file 
TEMPLATE_ENVIRONMENT = Environment(
       autoescape=False, 
       loader=FileSystemLoader(os.path.join(PATH)), 
       trim_blocks=False) 
template_source =TEMPLATE_ENVIRONMENT.loader.get_source(TEMPLATE_ENVIRONMENT, template_filename)[0] #replace template_filename with your template file relative to current file 
parsed_content = TEMPLATE_ENVIRONMENT.parse(template_source) 
variables= meta.find_undeclared_variables(parsed_content) 
print variables 

輸出:設置使用的變量

set(['CONFIG_PARAM_HTTPS_PROXY_PORT', 'CONFIG_PARAM_HTTP_PROXY_PORT'])