自动写代码的程序python jinja2

Mikele

重复写代码太累了,那么是否有自动帮我们写代码的东东呢?

选择一
做成公用组件

选择二
用模板生成代码

选择三
在评论里告诉我:)

在python中有模板引擎Jinja2. 不过一般看到它时都是介绍生成html模板的。
其实它是可以生成任何UTF-8的代码的。

如何生成呢?

# 代码生成器
from jinja2 import Template

# 先生成一个单词

tmpl = '{{ name }}'  # 模板
tmp = Template(tmpl)  # 载入模板
result = tmp.render(name='mikele')  # 输入变量,生成结果
print(result)  # mikele

把上面的功能定义成函数

def render(tmpl, *args, **kwds):
    '''jinja2 render'''
    vars = dict(*args, **kwds)
    tmp = Template(tmpl)
    return tmp.render(vars).strip()

生成一个列表循环

fruits = ['apple', 'banana']

tmpl_list = """
{% for fruit in fruits %}
{{ fruit }}
{% endfor %}
"""

result = render(tmpl_list, fruits=fruits)
print(result)

apple

banana

在 % 前面加个 - 可以去掉换行符

tmpl_list = """
{% for fruit in fruits -%}
{{ loop.index }}. {{ fruit }}
{% endfor %}
"""

print(render(tmpl_list, fruits=fruits))
  1. apple
  2. banana

生成一个函数

tmpl_fun = """
def {{fun}}():
    pass
"""

print(render(tmpl_fun, fun='eat'))
# 结果
def eat():
    pass

生成类

tmpl_class = """
class {{ model }}s:
    pass
"""

print(render(tmpl_class, model='Blog'))
class Blogs:
    pass

导入模块,类...

tmpl_import = """
from person import {{ models|join(', ') }}
"""

print(render(tmpl_import, models=['Teacher', 'Student']))

from person import Teacher, Student

判断

tmpl_if = """
{% if a > 2 %}{{ a }}{% else %}#小于2{% endif %}
"""

print(render(tmpl_if, a=3))

保存代码到程序里 codes.py

def save(data, filename='codes.py'):
    with open(filename, 'w') as f:
        f.write(data)
        
save(data=result)

有了这些就可以组合起来自动生成程序了。

如果变量少,可以用一个模板文件。
如果几个模板要拼在一起,就用直接像这样定义模板变量。再定义变量。

暂且介绍到这。。。

更多功能请到 Jinja2 官网查询 Jinja2模板

有什么问题可以留言,或者发我邮箱.

原文网址: 麦可乐的博客
https://segmentfault.com/a/11...

阅读 1k
4 声望
1 粉丝
0 条评论
你知道吗?

4 声望
1 粉丝
宣传栏