python中flask(四)
一个完整的网页一般都会包含大量的内容,如果仅仅使用之前的视图函数编写,会使代码变得既长又复杂,运行和维护起来都会很麻烦,这就需要模版了,在flask中,有着专有模版jinja2,简单来说,模版的存在简化了网页的编写,jinja2就是一种html文件。
我们使用前应该先建一个templates的文件夹,并将编写好的html文件放在其中,flask在运行的时候会自动搜索templates文件夹使用你引用的html文件,其中要注意的是:写好的python文件不要放在templates中,否则会无法正确跑的,python文件应该与templates文件夹同级才能正常运行。
1.jinja2简单结构:
首先我们需要了解jinja2模版的具体结构,之后是了解语法,毕竟html文件的编写方式与python的编码还是有着一定的差距。我们在pycharm中创建一个html5文件并命名,pycharm会自动给我们一个简单的模版,但在vsc里面就要自己写个开头才能自动补全。
上图就是html模版的基本结构,我们要做的,就是往这个模版里填充我们需要的东西即可。在前期,我们主要需要编写的部分是两个body中间的部分。
在写之前,需要简单了解一下html中的定界符,我们写出的命令要发挥作用少不了它的存在。简单来说可以分为三种,第一种是表达式,我们使用一些变量等的时候,需要用{{ }}来包含,第二种则是语句,一般用于我们写像if这样的循环的时候,需要用{% %},第三种则是我们需要解释相关语句的时候需要用到的注释,和python有些相似,使用的是{# #}。至于其他的一些特殊的字母符号,会在之后慢慢遇到,想要详细了解可以查一下html的结构。
2.模版渲染:
我们首先来尝试将html文件应用到python文件中。首先写一个简单的html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<p>Hello world</p>
</body>
</html>
我们将其命名为index.html,我们想要使用这个文件,首先要在py文件中import render_template:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def hello_world():
return render_template('index.html')
if __name__ == '__main__':
app.run()
然后我们运行一下,就会发现:
网页的标题改变了,这是因为html文件中两个title中间夹的即是网页的标题,其次是body的部分,成功输出了我们想要的内容。但这只是最简单的程序,下一步我们要实现的是参数的传递,简单来讲,就是将用户输入的内容从python后端传入html中并显示。但目前我们还没办法获取用户的输入,就只能靠我们自己指定一个变量并赋值,我们先在python中指定一个叫user的变量,再给它赋值,然后再html中再让它输出:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def hello_world():
return render_template('index.html', user='Jason')
if __name__ == '__main__':
app.run()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<p>Hello world</p>
<p>Your name is {{ user }}</p>
</body>
</html>
重新运行一下:
发现我们的参数成功的传入了,并且在网页上显示了出来,但是,这种方法有一个问题随着参数数量的增多,写起来也会很麻烦,所以我们可以在python文件中建一个字典,把我们的变量和对应的值都放到字典里面:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def hello_world():
username={
'user1': 'Jason',
'user2': 'Tom',
'user3': 'Jack'
}
return render_template('index.html', **username)
if __name__ == '__main__':
app.run()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<p>Hello world</p>
<p>The first people is {{ user1 }}</p>
<p>The second people is {{ user2 }}</p>
<p>The third people is {{ user3 }}</p>
</body>
</html>
运行一下这个代码:
要注意的是,字典的导入需要在前面加两个**,还有就是字典的语法,这个就是python的相关内容了,这样写会让我们代码更容易更改维护,下一步,就是if和for等循环的写法。