如果Flask能匹配URL,那么Flask可以生成它们吗?当然可以。你可以用url_for()来给指定的函数构造URL。它接受函数名作为第一个参数,也接受对应URL规则的变量部分的命名参数。未知变量部分会添加到URL末尾作为查询参数。这里有一些例子:
from flask import Flask, url_forapp = Flask(__name__)@app.route('/')def index():pass@app.route('/login')def login():pass@app.route('/user/<username>')def profile(username):passwith 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
为什么你要构建URL而非在模板中硬编码?这里有三个绝妙的理由:
- 反向构建通常币硬编码的描述性更好。更重要的是,它允许你一次性修改URL,而不是到处边找边改。
- URL构建会转义特殊字符和Unicode数据,免去你很多麻烦。
- 如果你的应用不位于URL的根路径(比如,在/myapplication下,而不是/),url_for()会妥善处理这个问题
