之前我们已经完成了flask项目跳转至我们自定义的页面,但是我们发现页面需要自己创建。在开发过程中,页面少的话还无所谓,一旦页面多了的话,那将会耗费很大的一部分开发时间,所以想要写很少的代码量,实现很多的页面,那就需要使用模板了。
一、jinjia2简介
flask框架是自带jinjia2模板引擎的,那什么是jinjia2呢?
Jinja2是基于python的模板引擎,功能比较类似于于PHP的smarty,J2ee的Freemarker和velocity。 它能完全支持unicode,并具有集成的沙箱执行环境,应用广泛。jinja2使用BSD授权。
jinjia2简介:
Jinja2是Python下一个被广泛应用的模版引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能。其中最显著的一个是增加了沙箱执行功能和可选的自动转义功能,这对大多应用的安全性来说是非常重要的。
他基于unicode并能在python2.4之后的版本运行,包括python3。
jinjia2的特点:
沙箱执行模式,模板的每个部分都在引擎的监督之下执行,模板将会被明确地标记在白名单或黑名单内,这样对于那些不信任的模板也可以执行。
强大的自动HTML转义系统,可以有效地阻止跨站脚本攻击。
模板继承机制,此机制可以使得所有的模板都具有相似一致的布局,也方便了开发人员对模板的修改和管理。
高效的执行效率,Jinja2引擎在模板第一次加载时就把源码转换成Python字节码,加快模板执行时间。
可选的预编译模式。
调试系统融合了标准的Python的TrackBack系统,使得模板编译和运行期间的错误能及时被发现和调试。
语法可配置,可以重新配置Jinja2使得它更好地适应LaTeX或JavaScript的输出。
模板设计人员帮助手册,此手册指导设计人员更好地使用Jinja2引擎的各种方法。
二、禁用跨域攻击系统
在flask中默认使用的是jinjia2模板引擎,如果我们在后端传入的是一段html模板的语句,在前段浏览器是不会被识别出来的,会被当做字符串输出。
这是因为jinjia2在处理时进行了转译,目的是为了防止页面被进行跨站点攻击。当然我们也可以屏蔽掉改处理机制。
方法一:设置autoescape 的值为false
在模板中加入进行修改:
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="{
{ url_for('static',filename='site.css') }}"/>
</head>
<body>
{% autoescape false %}
<h3>{
{ data }}</h3>
{% endautoescape %}
<nav>
<a href="{
{ url_for('.services') }}"