您的位置:

解决ValueError("When specifying _scheme, _external must be True")在flask出现报错

  发布时间:2023-02-18 15:43:38
报错的原因当使用 Flask 框架中的 url_for() 函数时,如果同时指定了 _scheme 参数和 _external=False 参数,会导致出现的错误。而当 _external 参数设置为 False 时,表示生成的 URL 仅包含相对路径。因此,在 _scheme 和 _external 参数同时存在时,会出现矛盾,导致抛出 ValueError 异常。总之,当使用 _scheme 参数时,需要同时将 _external 参数设置为 True,以避免出现的错误。如果不需要指定_scheme 参数可以不用指定 _scheme 和 _external 参数径的 URL 了。

报错的原因

当使用 Flask 框架中的 url_for() 函数时,如果同时指定了 _scheme 参数和 _external=False 参数,会导致出现 "ValueError: When specifying _scheme, _external must be True" 的错误。

这是因为,当指定 _scheme 参数时,表示要生成一个具有特定协议的 URL。而当 _external 参数设置为 False 时,表示生成的 URL 仅包含相对路径。因此,在 _scheme 和 _external 参数同时存在时,会出现矛盾,导致抛出 ValueError 异常。

解决这个问题的方法是,当指定 _scheme 参数时,需要同时将 _external 参数设置为 True。

例如:


url_for('index', _scheme='https', _external=True)

或者


url_for('index', _scheme='https')

这样就能生成一个具有 https 协议的绝对 URL 了。

总之,当使用 _scheme 参数时,需要同时将 _external 参数设置为 True,以避免出现 "ValueError: When specifying _scheme, _external must be True" 的错误。

如何解决

解决 "ValueError: When specifying _scheme, _external must be True" 的错误,需要在使用 Flask 框架中的 url_for() 函数时将 _scheme 和 _external 参数正确地设置。

正确的做法是,当指定 _scheme 参数时,需要同时将 _external 参数设置为 True。

例如:


url_for('index', _scheme='https', _external=True)

或者


url_for('index', _scheme='https')

这样就能生成一个具有 https 协议的绝对 URL 了。

如果不需要指定_scheme 参数可以不用指定 _scheme 和 _external 参数。


url_for('index')

径的 URL 了。

总之,解决 "ValueError: When specifying _scheme, _external must be True" 的错误,只需要在使用 _scheme 参数时同时将 _external 参数设置为 True 就可以了。如果不需要使用_scheme 参数,就不需要使用 _scheme 和 _external 参数。

需要注意的是,在使用 url_for() 时,还有其他参数,如 _anchor、_method、_fragment,需要根据需要来设置。

使用例子

当然有,下面是一个使用 Flask 的简单示例,展示了如何正确使用 url_for() 函数来生成 URL。


from flask import Flask, url_for

app = Flask(__name__)

@app.route('/')
def index():
    return 'Welcome to the homepage'

@app.route('/login')
def login():
    return 'Welcome to the login page'

@app.route('/profile/')
def profile(username):
    return 'Welcome to {}\'s profile'.format(username)

if __name__ == '__main__':
    app.run(debug=True)

在上面的示例中,我们可以使用 url_for() 函数来生成不同类型的 URL。


# generate relative URL
print(url_for('index'))  # /
print(url_for('login'))  # /login
print(url_for('profile', username='John')) # /profile/John

# generate absolute URL with scheme
print(url_for('index', _scheme='https', _external=True)) # https://localhost:5000/
print(

url_for('login', _scheme='https', _external=True)) # https://localhost:5000/login

print(url_for('profile', username='John', _scheme='https', _external=True)) # https://localhost:5000/profile/John



在这个例子中,我们使用了 _scheme 和 _external 参数来生成 https 协议的绝对 URL。

在这个例子中,我们使用了 _scheme 参数来生成 https 协议的绝对 URL,并且不需要使用 _external 参数。

需要注意的是,在上面的示例中,我们使用了一些简单的路由,在实际项目中,你可能需要使用更复杂的路由和参数来生成 URL。

总之,使用 url_for() 函数来生成 URL 时,需要正确地使用 _scheme 和 _external 参数,并根据需要使用其他参数。