3.4 链接
链接
任何具有多个路由的应用都需要可以连接不同页面的链接,例如导航栏。
在模板中直接编写简单路由的 URL 链接不难,但对于包含可变部分的动态路由,在模板 中构建正确的 URL 就很困难了。而且,直接编写 URL 会对代码中定义的路由产生不必要 的依赖关系。如果重新定义路由,模板中的链接可能会失效。
为了避免这些问题,Flask 提供了 url_for() 辅助函数,它使用应用的 URL 映射中保存的 信息生成 URL。
url_for()函数的简单用法
url_for() 函数最简单的用法是以视图函数名(或者 app.add_url_route() 定义路由时 使用的端点名)作为参数,返回对应的 URL。
例如,在当前版本的 hello.py 应用中
调用url_for('index')
得到的结果是 /,即应用的根 URL。
调用 url_for('index', _external=True)
返回的则是绝对地址,在这个示例中是 http://localhost:5000/。
- 生成连接应用内不同路由的链接时,使用相对地址就足够了。如果要生成 在浏览器之外使用的链接,则必须使用绝对地址,例如在电子邮件中发送 的链接。
url_for()函数生成动态URL
使用 url_for()生成动态 URL 时,将动态部分作为关键字参数传入。
例如,url_for('user', name='john', _external=True)
的返回结果是 http://localhost:5000/user/john。
传给 url_for() 的关键字参数不仅限于动态路由中的参数,非动态的参数也会添加到查询 字符串中。
例如,url_for('user', name='john', page=2, version=1)
的返回结果是
/user/ john?page=2&version=1。
《基于Python的Web应用开发实战(第二版)》