一:url_for函数
干什么的?传入函数名,得到函数的路由地址(访问视图函数的地址)
from flask import Flask from flask import url_for app = Flask(__name__) @app.route("/") def index(): login_url = url_for("login") print(login_url) return "主页" @app.route("/login") def login(): return "登录" if __name__ == '__main__': app.run(debug=True)
例如:浏览器输入:127.0.0.1:5000/ 显示主页 控制台输出 /login , 可以用它来完成跳转链接的功能:对上面的函数进行修改,加入html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <a href="{{ a }}">登录</a> </body> </html>
from flask import Flask from flask import render_template from flask import url_for app = Flask(__name__) @app.route("/") def index(): login_url = url_for("login") return render_template("url_for_test.html",a=login_url) @app.route("/login") def login(): return "欢迎进入登录页面" if __name__ == '__main__': app.run(debug=True)
点击登录后跳转到下面界面
注意:
login_url = url_for(“login”,_external = True) 这样会显示完整的url地址
http://127.0.0.1:5000/login
还可以传递参数,对路径进行拼接
login_url = url_for(“login”, a=1, _external = True)
http://127.0.0.1:5000/login?a=1 自动将位置参数,拼接成查询字符串
login_url = url_for(“login”, name=”haha”, _external = True)
假如点击index界面的登录,不跳转到登录界面,而是显示一张静态的图片
@app.route("/") def index(): login_url = url_for("static",filename="pic.jpg",_external=True) print(login_url) return render_template("url_for_test.html",a=login_url)
点击登录后,浏览器跳转后,显示了图片, 控制台输出:http://127.0.0.1:5000/static/pic.jpg 这种情况浏览器没有将 filenme=”pic.jpg” 拼接成
http://127.0.0.1:5000/static?pic.jpg 而是 拼接成 http://127.0.0.1:5000/static/pic.jpg
原因是:尝试将参数 filename=”pic.jpg” 改为 a=”pic.jpg”
报错:werkzeug.routing.BuildError: Could not build url for endpoint ‘static’ with values [‘a’]. Did you forget to specify values [‘filename’]?
说明:框架会自动分辨,要是以文件进行赋值,必须使用 filename=”文件”
三:产生的意义
在模板中的a标签手动输入链接地址,进行点击跳转,这个很简答,很容易办到。
假如,视图函数app.route(“地址”) 地址发生了,改变,那么要链接到这个视图函数,就需要对前端的每个链接进行修改,这显然不方便。
但是,通过url_for直接能反向获取视图函数的链接地址,这样就能省去,动态改变造成的麻烦。
最新评论