1
我需要獲取模板上下文所需的變量列表,以便能夠向使用my service的程序員提供一些反饋。如何讀取Jinja2模板並獲取需要變量的列表以呈現它?
我該怎麼做?
我正在考慮給出一個上下文對象,當模板嘗試訪問它時會創建變量,然後在渲染後給我上下文對象中的變量列表。
這可能嗎?
我需要獲取模板上下文所需的變量列表,以便能夠向使用my service的程序員提供一些反饋。如何讀取Jinja2模板並獲取需要變量的列表以呈現它?
我該怎麼做?
我正在考慮給出一個上下文對象,當模板嘗試訪問它時會創建變量,然後在渲染後給我上下文對象中的變量列表。
這可能嗎?
解析模板,您可以找到所有變量:http://jinja.pocoo.org/docs/api/#the-meta-api 包括的示例。
使用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'])
的你爲什麼不提供一個變量「varnames」,並傳達給模板設計者,他們可以用它來看看增加可用的變量。 – XORcist
因爲我只有模板內容才能獲取此信息。 – Natim
你可能會運用monkeypatching上下文對象的'resolve'方法。 – XORcist