• 【Flask】Flask中关于url_for()


    概述

    在Flask开发中总会遇到一些坑,下面是自己踩到的关于url_for()的坑

    url_for()函数是用于构建指定函数的URL。

    url_for操作对象是函数,而不是route里的路径。

    如果route和函数名不一样而导致使用url_for()错误,千万不要去route找错误。 
    例如下面的代码:

    from flask import Flask, url_for
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        pass
    
    @app.route('/login')
    def LOGIN():
        pass
    
    with app.test_request_context():
        print(url_for('index'))
        print(url_for('login'))

    print(url_for('index'))没有报错,就是一个反斜杠;print(url_for('login'))报错,抛出BuildError异常:

    / 
    Traceback (most recent call last): 
    File “<pyshell#12>”, line 3, in 
    print(url_for(‘login’)) 
    File “C:Python35libsite-packagesflaskhelpers.py”, line 332, in url_for 
    return appctx.app.handle_url_build_error(error, endpoint, values) 
    File “C:Python35libsite-packagesflaskapp.py”, line 1811, in handle_url_build_error 
    reraise(exc_type, exc_value, tb) 
    File “C:Python35libsite-packagesflask_compat.py”, line 33, in reraise 
    raise value 
    File “C:Python35libsite-packagesflaskhelpers.py”, line 322, in url_for 
    force_external=external) 
    File “C:Python35libsite-packageswerkzeug
    outing.py”, line 1758, in build 
    raise BuildError(endpoint, values, method, self) 
    werkzeug.routing.BuildError: Could not build url for endpoint ‘login’. Did you mean ‘index’ instead?

    把login修改为LOGIN:

    with app.test_request_context():
        print(url_for('index'))
        print(url_for('LOGIN'))

    打印正常:

    / 
    /login

    参数

    url_for()也可以附带一些参数,比如想要完整的URL,可以设置_external为Ture:

    url_for('.static',_external=True,filename='pic/test.png')

    这样返回的url是http://localhost/static/pic/test.png

      • endpoint 
        URL的端点(即函数的名字)
      • values 
        URL的变量参数
      • _external 
        如果设置为True,则生成一个绝对路径URL
      • _scheme 
        一个字符串指定所需的URL方案。_external参数必须设置为True,不然会抛出ValueError。
      • _anchor 
        如果设置了这个则给URL添加一个mao
      • _method 
        如果设置这个则显示地调用这个HTTP方法

    转自:https://blog.csdn.net/yannanxiu/article/details/52287870

  • 相关阅读:
    Invalid command 'RewriteEngine'解决办法
    JEZ reCAPTCHA 谷歌验证码插件及使用方法
    一段图片预加载的代码
    Fancybox
    Silverlight4 beta 中的.net ria service自定义用户身份验证之改变
    .net ria service 数据验证(7)
    .net ria services 自定义函数(9)
    C#开发ActiveX控件及制作CAB包
    Silverlight 3.0 中的 Local Connection
    Silverlight3端操作数据库(5)
  • 原文地址:https://www.cnblogs.com/liuxiaowei/p/9039622.html
Copyright © 2020-2023  润新知