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 sign_in():
pass
with app.test_request_context():
print(url_for('index'))
print(url_for('login'))
print(url_for(‘index’))没有报错;print(url_for(‘login’))报错,抛出BuildError异常:
正常的代码如下:
with app.test_request_context():
print(url_for('index'))
print(url_for('sign_in'))
参数
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方法