<table border="1" cellspacing="0" cellpadding="0">
<tr>
{% if array_table_head %}
{% for var_i in array_table_head %}
<th >{{var_i}}</th>
{% endfor %}
{% endif %}
</tr>
{% if dict_table_data %}
{% for table_data in dict_table_data %}
<tr>
<th >{{ table_data.Name }}</th>
writelines方法的参数可以是
<th >{{ table_data.Type }}</th>
<th >{{ table_data.Value }}</th>
</tr>
{% endfor %}
{% endif %}
</table>
</body>
</html>
其中, 以{% %}包裹的为模板语句,语法和python神似,只有些许不同,详见(过滤器等),以{{ }} 包裹的为变量引⽤,会被Jinja2解析为⼀个变量,即动态变化的数据。
⼆、加载模板
有了上述的html模板,后台利⽤如下代码读⼊。
import jinja2
env = jinja2.Environment(loader=jinja2.FileSystemLoader(path))
temp = _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 = der(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)具有模板继承的特性,减少⼤量的⼯作量。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

Python 的各种符号
« 上一篇
python进行文件对比的方法
下一篇 »

发表评论

推荐文章

热门文章

最新文章

标签列表