zoukankan      html  css  js  c++  java
  • flask之url_for函数

    一: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直接能反向获取视图函数的链接地址,这样就能省去,动态改变造成的麻烦。

  • 相关阅读:
    docker 单kafka ,多分区
    spring data jpa + mysql使用json 类型
    C++ Multithread Tutorial
    GDB 调试程序
    C++ Project 积累(四)
    GDB 调试 C/C++ Project
    makefile 学习(一)
    Ubuntu 下配置 boost + eclipse
    C++ Project 积累(3)
    Leetcode Sudoku Solver
  • 原文地址:https://www.cnblogs.com/meloncodezhang/p/11726057.html
Copyright © 2011-2022 走看看