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

  • 相关阅读:
    poj 2763 Housewife Wind
    hdu 3966 Aragorn's Story
    poj 1655 Balancing Act 求树的重心
    有上下界的网络流问题
    URAL 1277 Cops and Thieves 最小割 无向图点带权点连通度
    ZOJ 2532 Internship 网络流求关键边
    ZOJ 2760 How Many Shortest Path 最大流+floyd求最短路
    SGU 438 The Glorious Karlutka River =) 拆点+动态流+最大流
    怎么样仿写已知网址的网页?
    5-10 公路村村通 (30分)
  • 原文地址:https://www.cnblogs.com/meloncodezhang/p/11726057.html
Copyright © 2011-2022 走看看