说明
Jinja2是一种模板生成语言,其作者也是Flask的作者。
模板生成有什么用? 减少大量的重复coding,提高效率。
环境
Jinja2 可以单独使用,安装好包以后就可以了。启动时要指明加载的路径等等,参考[Jinja2]基本使用
简单的三板斧如下:
import jinja2
1.配置模板文件搜索路径
TemplateLoader = jinja2.FileSystemLoader(searchpath=’/xxx’)
2.创建环境变量
TemplateEnv = jinja2.Environment(loader=TemplateLoader)
3.加载模板,渲染数据
template = TemplateEnv.get_template(template_name)
html = template.render(**kw)
如果是在Flask使用,可以导入其下的render_template(相当于是设置好模板资源路径的Jinja2)
基本的使用方法
基本的概念在网上很容搜到,以下仅从程序的角度罗列几点:
- 1 变量:使用 {{xx}} 表示
- 2 If 语句:使用 {%if xxx%} 内容1 {%else%} 内容2 {%endif%}
- 3 for语句:使用{%for x in x_list%} do with {{x}} {%endfor%}
- 4 for语句中的索引: loop.index
- 5 列表的长度:使用 some_list|length 来获得长度(使用|来获取对象的长度属性)
- 6 注释:{##}
感觉这个和SAS的宏编程比较相似。在Jinja中也可以编写函数,以后有机会再续。
Jinja2的一个应用
解决函数和变量的重命名问题。
定义一个python函数,例如
def somefunc(somevar):
print(somevar)
return somevar
使用jinja
def {{funcname1}}({{var1}}):
print({{var1}})
return {{var1}}
可以先随意定义, 约定函数以func_开头,变量以var_开头,写完以后抽取出来进行替换,生成jinja文件。
例子1:从字典生成cypher创建节点的语句
将python字典通过jinja转为cypher语句。
原始的python字典:
{'id': 34488229, 'name': 'xxx', 'type': 2,
'innode': False, 'properties': {'name': 'xxx'}}
{'id': 118525322, 'name': 'yyy', 'type': 1,
'innode': False, 'properties': {'regno': '12345', 'esdate': '2016-12-09',
'creditcode': 'xxxx', 'regcapcur_desc': '人民币元', 'regcapcur': '156',
'regcap': '20000.000000', 'name': 'yyy', 'entstatus': '1', 'islist': '0'}}
期望为的格式:
with [{id: 34488229, name: 'xxx', type: 2, innode: False},
{id: 118525322, name: 'yyy', type: 1, innode: False,
regno: '111', esdate: '2016-12-09', creditcode: '222',
regcapcur_desc: '人民币元', regcapcur: '156', regcap: '20000.000000', islist: '0'}] as data
UNWIND data as row
merge (n{id:row.id})
on match set n.id = row.id , n.name= row.name, n.type = row.type
on create set n.id = row.id, n.name = row.name, n.type = row.type
return distinct(true) as status
jinja模板
with
[
{% for node in node_list %}
{%if not loop.first%}
,
{%endif%}
{id:{{node.id}}
,name:'{{node.name}}'
{%if node['properties.regno']%}
,regno:'{{node['properties.regno']}}'
{%endif%}
}
{% endfor %}
] as data
UNWIND data as row
merge (n{id:row.id})
on match set n.id = row.id , n.name= row.name, n.regno = row.regno
on create set n.id = row.id, n.name = row.name, n.regno = row.regno
return distinct(true) as status
在python中执行之前的三板斧(中间的换行符是因为在模板中的换行产生的,不影响执行)
with
[
{id:34488229
,name:'xxx'
}
,
{id:118525322
,name:'yyy'
,regno:'12345'
}
] as data
UNWIND data as row
merge (n{id:row.id})
on match set n.id = row.id , n.name= row.name, n.regno = row.regno
on create set n.id = row.id, n.name = row.name, n.regno = row.regno
return distinct(true) as status
本文介绍Jinja2模板引擎的基本使用,包括变量、条件语句、循环语句等核心概念,展示如何利用Jinja2提高编程效率,特别是在Flask框架中的应用,并通过实例演示如何将Python字典转换为Cypher语句。
512

被折叠的 条评论
为什么被折叠?



