Parsing 从jinja2 ast生成代码

Parsing 从jinja2 ast生成代码,parsing,templates,jinja2,abstract-syntax-tree,Parsing,Templates,Jinja2,Abstract Syntax Tree,假设我有一个jinja模板 <style> p{ font-family : 'Times New Roman',Times,serif; font-size:15px; } </style> <p>------- Information -------- </p> {% set p1 = getP1('dataset') %} <table style='width:100%'> <tr> &

假设我有一个jinja模板

<style>
p{
    font-family : 'Times New Roman',Times,serif;
    font-size:15px;
}
</style>

<p>------- Information -------- </p>

{% set p1 = getP1('dataset') %}

<table style='width:100%'>
<tr>
    <th>Information</th>
</tr>
<tr>
    <td>A</td>
    <td>{{p1.a}}</td>
</tr>
<tr>
    <td>B</td>
    <td>{{p1.b}}</td>
</tr>
<tr>
    <td>C</td>
    <td>{{p1.c}}</td>
</tr>
</table>

p{
字体系列:“泰晤士报新罗马”,泰晤士报,衬线;
字体大小:15px;
}
-------资料--------

{%set p1=getP1('dataset')%} 问询处 A. {{p1.a} B {{p1.b} C {{p1.c}
我可以用jinja2将代码解析为jinja2模板,其中的代码就是我在上面粘贴的字符串

In [58]: from jinja2 import Environment

In [59]: env = Environment()

In [60]: m = env.parse(code)

In [61]: m
Out[61]: Template(body=[Output(nodes=[TemplateData(data=u"\n<style>\np{\n\tfont-family : 'Times New Roman',Times,serif;\n\tfont-size:15px;\n}\n</style>\n\n<p>------- Information -------- </p>\n\n")]), Assign(target=Name(name='p1', ctx='store'), node=Call(node=Name(name='getP1', ctx='load'), args=[Const(value=u'dataset')], kwargs=[], dyn_args=None, dyn_kwargs=None)), Output(nodes=[TemplateData(data=u"\n\n<table style='width:100%'>\n\t<tr>\n\t\t<th>Information</th>\n\t</tr>\n\t<tr>\n\t\t<td>A</td>\n\t\t<td>"), Getattr(node=Name(name='p1', ctx='load'), attr='a', ctx='load'), TemplateData(data=u'</td>\n\t</tr>\n\t<tr>\n\t\t<td>B</td>\n\t\t<td>'), Getattr(node=Name(name='p1', ctx='load'), attr='b', ctx='load'), TemplateData(data=u'</td>\n\t</tr>\n\t<tr>\n\t\t<td>C</td>\n\t\t<td>'), Getattr(node=Name(name='p1', ctx='load'), attr='c', ctx='load'), TemplateData(data=u'</td>\n\t</tr>\n</table>')])])
[58]中的
:来自jinja2导入环境
在[59]:env=Environment()中
In[60]:m=env.parse(代码)
In[61]:m
Out[61]:模板(body=[Output(nodes=[TemplateData(data=u”\n\np{\n\tfont family:'Times New Roman',Times,serif;\n\tfont size:15px;\n}\n\n\n----信息----

\n\n”))、赋值(target=Name(Name='p1',ctx='store node=Call node=Name(Name='getP1',',ctx='load')、args=[Const(value=u'dataset')、kwargs=]3.输出(节点=[模板数据(数据=u”\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\n\t\t\n\t\n\n\t\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\(node=Name(Name='p1',ctx='load')、attr='c',ctx='load')、TemplateData(data=u'\n\t\n')]))
如何将模板转换回代码

对于python代码,我们有如下包。 根据这一点,jinja2不支持该功能!那么我如何编写代码来实现该功能呢