python jinja2_Python Jinja2使用方法

说起Jinja2 想必每个资深的python程序猿都有所接触,因为它被作为了一些主流web框架(如Flask, Django)的数据渲染的底层调用,尤其是其模板语言,相当方便。

近期利用Jinja2完成了一个后台(Python)与前端(HTML)之间的数据交互,利用了Jinja2的模板语言,省下了相当于多的心思,下面就先分享一下我使用的模板语言主要有哪些,还有注意事项吧~~

一、 作为一个模板语言,它的主要优势是可以省去很多重复的前端代码,用类似于后台循环代码等方式来产生html,首先,需要读入一个带有模板语言的html 模板,类似于如下:

{{ content }}

{% if array_table_head %}

{% for var_i in array_table_head %}

{{var_i}}

{% endfor %}

{% endif %}

{% if dict_table_data %}

{% for table_data in dict_table_data %}

{{ table_data.Name }}{{ table_data.Type }}{{ table_data.Value }}

{% endfor %}

{% endif %}

其中, 以{% %}包裹的为模板语句,语法和python神似,只有些许不同,详见Jinja2官方文档(过滤器等),以{{ }} 包裹的为变量引用,会被Jinja2解析为一个变量,即动态变化的数据。

二、加载模板

有了上述的html模板,后台利用如下代码读入。

import jinja2

env = jinja2.Environment(loader=jinja2.FileSystemLoader(path))

temp = env.get_template('statics/template.html')

注意一点: 其中path需要为当前python文件所在目录的完整路径,get_template内部的参数为html模板相对于该python文件所在目录的路径(相对路径)。

三、模拟数据,对模板进行Render

通过第一部分的html模板中我们不难发现该模板一共需要三个变量,content、 array_table_head 以及 dict_table_data。所以我们需要在后台对这三个变量进行模拟。

1. 类型分析。需要注意的是,变量的类型一定要把控好,从模板的观察可以看出content是直接用{{ }}包裹来引用的,所以在后台应该是一种可以直接取值的类型,例如str, int等。而array_table_head是通过遍历来引用的,说明最外层在后台是一个List或tuple等可遍历对象,其次在内层是直接取值的,所以后台应该是一个简单的str或者int的列表。同理,对于dict_table_data, 则是一个字典字符串,所以三个变量的模拟应该如下:

render_dict = {}

dict_table_data = [{'Name': 'Basketball', 'Type': 'Sports', 'Value': 5},

{'Name': 'Football', 'Type': 'Sports', 'Value': 4.5},

{'Name': 'Pencil', 'Type': 'Learning', 'Value': 5},

{'Name': 'Hat', 'Type': 'Wearing', 'Value': 2}]

render_dict.update({'Content': 'Hello reader, here is a table:',

'array_table_head': ['Name', 'Type', 'Value'],

'dict_table_data': dict_table_data})

2. 模板渲染

最后一步,即通过render方法将变量放入模板中,然后生成新的html写入文件,此时,模板语言将会全部被转化为html。

temp_out = temp.render(content=render_dict['Content'],

array_table_head=render_dict['array_table_head'],

dict_table_data=render_dict['dict_table_data'])

with open(os.path.join(path, 'statics/out.html'), 'w', encoding='utf-8') as f:

f.writelines(temp_out)

f.close()

四、总结

Jinja2 对于html数据渲染有奇效,同时还具有许多优点:

(1)安全: 强大的 HTML 自动转义系统保护系统免受 XSS攻击。

(2)编译快速: 及时编译最优的 python 代码。

(3)易于调试。异常的行数直接指向模板中的对应行。

(4)具有模板继承的特性,减少大量的工作量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值