flask jinjia2关于模版介绍和路径查找
一、jinjia2是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。 它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全:
特性:
- 沙箱中执行
- 强大的 HTML 自动转义系统保护系统免受 XSS
- 模板继承
- 及时编译最优的 python 代码
- 可选提前编译模板的时间
- 易于调试。异常的行数直接指向模板中的对应行。
- 可配置的语法
二、关于路径模版路径传递参数
from flask import Flask,request,url_for,render_template
app = Flask(__name__)
#解决传递参数的问题{{xxxx}}
@app.route('/')
def hello():
return render_template("para.html",para="金甲")
#解决访问参数项过多的问题,将所有参数局放在一个字典中,然后字典传参数的时候,使用**
@app.route('/test')
def hello1():
content = {
"uname":"xiaoming",
"age":18,
"childrens":{
"name":"hanhanmeimei",
"city":"beijing",
}
}
return render_template("para.html",**content)
if __name__ == '__main__':
app.run(port = 5008)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h4>金甲参数传递的演示</h4>
<p><font color="blue">黄沙百战穿{{ para }}</font></p>
<p>我叫{{ uname }}</p>
<p>年龄:{{ age }}</p>
<!--获取字典的方式-->
<p>我的同学{{ childrens.name }}</p>
<p>来自{{ childrens["city"] }}</p>
</body>
</html>
三、jinjia2 定义template模版路径
from flask import Flask,request,url_for,render_template
app = Flask(__name__,template_folder="C:/test/template2")
@app.route('/')
def hello():
uname = "zhangsan"
return render_template("index.html",content=uname)
@app.route('/path')
def hello1():
uname = "lisi"
#指定模版路径/template/new/index1.html
return render_template("/new/index1.html",content=uname)
@app.route('/path1')
def hello2():
uname = "wangwu"
# 自定义模版路径/test/template2/index2.html
return render_template("index2.html",content=uname)
if __name__ == '__main__':
app.run(port = 5007)
模版默认路径index:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>金甲系统</title>
</head>
<body>
<h4>金甲模版</h4>
<p>欢迎<font color="red">{{ content }}</font>来访问我的博客</p>
</body>
</html>
修改模版默认路径:/new/index1:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h4>金甲2模版</h4>
<p>欢迎<font color="red">{{ content }}</font>欢迎再次来访问我的博客</p>
</body>
</html>
自定义模版路径:/test/template2/index2.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h4>金甲3模版</h4>
<p>欢迎<font color="red">{{ content }}</font>欢迎再次来访问我的博客</p>
</body>
</html>
四、模版中使用url_for
from flask import Flask,url_for,render_template
app = Flask(__name__)
@app.route('/')
def shouye():
return render_template("index1.html")
@app.route('/login1')
def login1():
return render_template("login1.html")
@app.route('/login1')
def login2():
return render_template("login1.html")
@app.route('/login1/<name>')
def login3(name):
print(name)
return render_template("login1.html")
if __name__ == '__main__':
app.run(port = 5009)
登录:login1
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
用户名:<input type="text" value="">
密 码:<input type="text" value="">
<input type="submit" value="提交">
</body>
</html>
首页:index1
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h4>首页1</h4>
{# 方法一:路径传参 #}
<a href="/login1">登录1</a>
<h4>首页2</h4>
{# 方法二:路径传参
<!--url_for(" 函数名")-->
<a href="{{ url_for("login1")}}">登录2</a>
<h4>首页3</h4>
{# 方法三:带参数的路径传参 #}
<!--url_for(" 函数名,参数名")-->
<a href="{{ url_for("login1",name="huahua")}}">登录3</a>
</body>
</html>