今天来学习一下Flask中网页模板以及网页模板参数的使用。
如果你是使用Pycharm pro版的话,创建项目的时候,选择Flask项目,所有的基础文件和文件夹Pycharm会自动帮你创建出来,在网上找了张图,仅供参考:
选择项目类型:Flask,这里注意你的Python版本 创建好之后就是下面的样子:
由于我用的是Pycharm community版本,没有项目类型可选,但是自己补一下两个文件夹就行,一个是static,一个是templates。 简单说明一下,static是存放image, css等项目文件的。templates是存放页面模板等项目文件的。
下面就模拟一个需求,用户已经登录了,要在首页显示用户的用户名信息,再随便写一句欢迎的话。这里我们就要引入一个新的类:render_template,模板渲染。为什么这么叫?因为就是直接翻译过来的,它的功能就是来渲染模板的,至于渲染这个词,是绘图术语,渲染在电脑绘图中是指用软件从模型生成图像的过程。从这个定义来理解的话,就是美化,填充模型,让模型更好看吧。就这么理解吧!
.py完整代码如下:
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def index():
return render_template('index.html', username='uncleBen')
if __name__ == '__main__':
app.run(debug=True)
需要注意的是: 首先,导入Flask和render_template 其次,在使用的时候,一般就是return的内容做渲染,那就是return render_template(),这个render_template()函数里需要传一个最基本的参数就是你要渲染哪个页面,告诉它html文件名就行,因为它默认就会去templates这个文件下找你提供的html文件名,所以你的html文件不要乱放,否则它会找不到的。另外一个参数就是你要在前端页面中显示什么?今天这个例子是要显示用户名,拿就传一个username参数进去。如有其它参数,也可以加,然后赋值。
好了,py文件内容写好了,那么html里的代码应该这么写呢?这么才能拿到参数的值呢?来看一下html的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
欢迎<b>{{ username }}</b>来到您的个人主页,这个页面是templates文件夹中的index.html模板。
</body>
</html>
很简单,唯一跟普通HTML文件的区别就是多了一个{{ username }},重点来了,在Flask项目的HTML中如下想引用参数(py文件中定义的),必须要用双花括号{{ }}括起来,就好了。so easy啊! 来看一下效果,上面Py代码里我传的username='uncleBen',效果如下: 然后我们再换一个用户名,让username='张无忌'
如果有多个参数呢?那刚开始你肯定要这么写了:
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def index():
return render_template('index.html', username='张无忌', reg_days=15, location='光明顶')
if __name__ == '__main__':
app.run(debug=True)
运行一下,看看结果:
但是如果还有更多参数呢???比如10个,20个,要写这么多吗?这样会让人看到很不爽和很不专业的感觉。
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def index():
context = {
'username': '张无忌',
'reg_days': 100,
'location': '光明顶'
}
return render_template('index.html', **context)
if __name__ == '__main__':
app.run(debug=True)
为了区别,我把注册时间改成了100,来,运行一下,看一下效果:
小结
- 模板文件位置:应该放到templates文件夹下。
- 如果使用模板渲染函数,首先导入render_template类。
- 使用render_template()函数时,要告诉这个函数要渲染的html文件名,还有参数名和值,如果有的话。
- 在HTML中引用参数的格式:{{参数名}},一定要这个格式,这是Flask的语法,其它格式无效。
- 参数多的情况下,建议使用字典形式定义参数和值,然后在render_template()中利用**+字典名进行传参。