返回介绍

生成链接

发布于 2025-01-02 21:53:48 字数 1665 浏览 0 评论 0 收藏 0

现在的登录表单已经相当完整了,但在结束本章之前,我想讨论在模板和重定向中包含链接的妥当方法。 到目前为止,你已经看到了一些定义链接的例子。 例如,这是当前基础模板中的导航栏代码:

    <div>
        Microblog:
        <a href="/index">Home</a>
        <a href="/login">Login</a>
    </div>

登录视图函数同样定义了一个传入到 redirect() 函数作为参数的链接:

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        # ...
        return redirect('/index')
    # ...

直接在模板和源文件中硬编码链接存在隐患,如果有一天你决定重新组织链接,那么你将不得不在整个应用中搜索并替换这些链接。

为了更好地管理这些链接,Flask 提供了一个名为 url_for() 的函数,它使用 URL 到视图函数的内部映射关系来生成 URL。 例如, url_for('login') 返回 /loginurl_for('index') 返回 /indexurl_for() 的参数是 endpoint 名称,也就是视图函数的名字。

你可能会问,为什么使用函数名称而不是 URL? 事实是,URL 比起视图函数名称变更的可能性更高。 稍后你会了解到的第二个原因是,一些 URL 中包含动态组件,手动生成这些 URL 需要连接多个元素,枯燥乏味且容易出错。 url_for() 生成这种复杂的 URL 就方便许多。

因此,从现在起,一旦我需要生成应用链接,我就会使用 url_for() 。基础模板中的导航栏部分代码变更如下:

    <div>
        Microblog:
        <a href="{{ url_for('index') }}">Home</a>
        <a href="{{ url_for('login') }}">Login</a>
    </div>

login() 视图函数也做了相应变更:

from flask import render_template, flash, redirect, url_for

# ...

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        # ...
        return redirect(url_for('index'))
    # ...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文