如果 Flask 能匹配 URL,那么 Flask 可以生成它们吗?当然可以。你可以用
url_for() 来给指定的函数构造 URL。它接受函数名作为第一个
参数,也接受对应 URL 规则的变量部分的命名参数。未知变量部分会添加到
URL 末尾作为查询参数。这里有一些例子:
>>> from flask import Flask, url_for
>>> app = Flask(__name__)
>>> @app.route('/')
... def index(): pass
...
>>> @app.route('/login')
... def login(): pass
...
>>> @app.route('/user/<username>')
... def profile(username): pass
...
>>> with app.test_request_context():
... print url_for('index')
... print url_for('login')
... print url_for('login', next='/')
... print url_for('profile', username='John Doe')
...
/
/login
/login?next=/
/user/John%20Doe
(这里也用到了 test_request_context() 方法,下面会
解释。即使我们正在通过 Python 的 shell 进行交互,它依然会告诉 Flask 要
表现为正在处理一个请求。请看下面的解释。 环境局部变量 )
为什么你要构建 URL 而非在模板中硬编码?这里有三个绝妙的理由: