Генерация кода от jinja2 ast - PullRequest
0 голосов
/ 05 июля 2018

Допустим, у меня есть шаблон дзиндзя

<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>

Я могу проанализировать код с помощью 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>')])])

Как я могу преобразовать шаблон обратно в код?

В случае кода на Python у нас есть пакеты типа astor . Согласно этой проблеме , jinja2 не поддерживает эту функцию! так как я могу написать код для этого?

...