如果 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 而非在模板中硬编码?这里有三个绝妙的理由:
- 反向构建通常比硬编码的描述性更好。更重要的是,它允许你一次性修改 URL,
而不是到处边找边改。 - URL 构建会转义特殊字符和 Unicode 数据,免去你很多麻烦。
- 如果你的应用不位于 URL 的根路径(比如,在 /myapplication 下,而不
是 / ), url_for() 会妥善处理这个问题。
作者:唐伯虎点蚊香,如若转载,请注明出处:https://www.web176.com/flask2/21771.html