前面我们学习了flask的安装和用一个小程序测试flask是否安装成功,并且提及到jinja2
模板。
jinja2
模板使用为了使用jinja2
模板,我们需要在当前网站目录下建立一个templates
的目录,将在templates
文件夹中创建一个名为index.html
的文件,其中的内容如下:
jinja2模板
{% if name %}
你好, {
{ name }}!
{% else %}
你好!小红!
{% endif %}
jinja2
模板扩充了HTML
的语法,其中加入了逻辑判断和变量,变量是用双嵌套花括号{ {}}
来引用的,而逻辑控制则用{%%}
来标识。这样可以动态控制HTML
显示的内容,比如上述代码中,如果name
变量有给出小明
,则页面显示你好,小明
,否则只显示你好!小红!
。
创建一个新的路由:
from flask import render_template
@app.route("/hello")
def hello():
return render_template('index.html', name="小明")
运行项目后访问http://127.0.0.1:8090/hello
,即会显示如下界面:
为了动态变化预定义模板中的人员姓名,我们需要向路由中传递一个参数,形式如下:http://127.0.0.1:8090/hello/小绿
,下面代码演示了这个功能如何实现:
@app.route("/hello//")
def hello(name):
return render_template('index.html', name=name)
观察代码会发现其中加入了
字样,这意味着在路由中添加了一个名为name
的变量,相应地,由该路由修饰的函数需要接收name
来进行处理,这时在浏览器地址栏输入http://127.0.0.1:8090/hello/小绿
,则显示的图形如下所示:
这里有一个问题,就是当我们在路由上不输入参数的时候会是怎么样的呢?即直接输入http://127.0.0.1:8090/hello
,根据上面我们的index.html
,当没有接受到name
变量时,应该输出你好!小红!
,但是实际情况如下:
可以看到,明显报错了,从显示的出错信息可以看出,提示我们输入的url
地址有问题,仔细分析后会发现,带参数的地址和不带参数的地址被Flask
解释为不同的地址,这就需要用不同的路由都指向hello()
函数,修改后的代码如下:
@app.route("/hello/")
@app.route("/hello//")
def hello(name=''):
return render_template('index.html', name=name)
添加一个路由后,Flask
就会正确解析空参数的地址了,但还有一个要注意的地方是需要在映射的函数hello()
中给name
赋予一个空字符串做为默认参数,这样在匹配/hello/
时,会将默认参数值传入index.html
模板中,这样就实现了我们的意图,显示如下:
在Flask
中,路由中变量默认是字符串类型,其实除了字符串类型外,其实还有int,float,path
下面是有关代码:
@app.route("/num1/")
def num1(number1):
return f"接收的整数数字是:{number1}"
@app.route("/num2/")
def num2(number2):
return f"接收的浮点数字是:{number2}"
@app.route("/mypath/")
def mypath(curpath):
return f"接收的路径是:{curpath}"
当为路由指定转换器后,凡不符合转换器指定内容的,页面将弹出404
错误。
有时候我们会需要得到IP地址及URL,此时用到Flask
中的request
对象,演示如下:
from flask import request
@app.route("/getpath/")
def getpath():
return f"当前IP地址:{request.remote_addr},
当前URL:{request.url},
当前路径:{request.path}"
本文对jinja2
模板使用和Flask
的路由进行了较详细的分析,如何利用路由进行整个系统的规划,是很重要的问题。
Flask学习笔记(一)
Flask学习笔记(三)
Flask学习笔记(四): Flask与数据库连接