You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask Jinja2页面间导航:HTML中href的正确语法问询

Jinja2中页面导航的正确href语法

从你提到的server.py来看,应该是在Flask框架下使用Jinja2模板,这种场景下不建议硬写HTML的href路径,最好用Flask提供的url_for()函数生成路由URL——不管后续路由怎么调整,导航链接都能自动适配,不会出错。下面一步步给你讲具体实现:

1. 先确认Flask路由配置正确

首先在server.py里,给两个页面定义好路由,每个路由的endpoint(可以理解为路由的“别名”)要清晰,没显式指定的话默认就是视图函数的名字:

# server.py
from flask import Flask, render_template

app = Flask(__name__)

# 名单展示页路由,endpoint默认是`list_of_names`(即视图函数名)
@app.route('/list')
def list_of_names():
    # 模拟要传递的名单数据
    names = ["Alice", "Bob", "Charlie"]
    return render_template('listOfNames.html', names=names)

# 人员详情页路由,需要接收名字参数,endpoint默认是`person_info`
@app.route('/person/<name>')
def person_info(name):
    # 模拟根据名字获取的详情数据
    person_data = {"name": name, "age": 30, "job": "Software Engineer"}
    return render_template('personInformation.html', person=person_data)

if __name__ == '__main__':
    app.run(debug=True)

2. 在Jinja2模板中用url_for()生成href

从listOfNames.html跳转到personInformation.html

在名单页里,给每个名字生成详情页链接时,用url_for()指定目标路由的endpoint,同时传递路由需要的参数:

<!-- listOfNames.html -->
<!DOCTYPE html>
<html>
<head>
    <title>人员名单</title>
</head>
<body>
    <h1>人员名单</h1>
    <ul>
        {% for name in names %}
            <!-- 第一个参数是路由的endpoint,后面是路由要求的参数 -->
            <li><a href="{{ url_for('person_info', name=name) }}">{{ name }}</a></li>
        {% endfor %}
    </ul>
    <!-- 也可以添加返回当前页的测试链接 -->
    <p><a href="{{ url_for('list_of_names') }}">刷新名单页</a></p>
</body>
</html>

从personInformation.html跳转回listOfNames.html

在详情页里,添加返回名单页的链接,同样用url_for()指定对应路由的endpoint即可:

<!-- personInformation.html -->
<!DOCTYPE html>
<html>
<head>
    <title>{{ person.name }}的详情</title>
</head>
<body>
    <h1>{{ person.name }}的个人信息</h1>
    <p>年龄: {{ person.age }}</p>
    <p>职位: {{ person.job }}</p>
    <!-- 直接指定名单页的endpoint,无需额外参数 -->
    <p><a href="{{ url_for('list_of_names') }}">返回人员名单</a></p>
</body>
</html>

为什么推荐用url_for()?

  • 灵活性拉满:如果以后你修改了路由的URL(比如把/list改成/staff/names),只要endpoint不变,所有模板里的链接都会自动更新,不用逐个修改href。
  • 绝对正确:url_for()会自动处理特殊字符编码、应用部署的子路径等场景,生成的URL不会出现路径错误。

常见避坑点

  • 别硬写相对路径比如<a href="/person/{{ name }}">,本地调试可能没问题,但部署到带子路径的服务器就会出错。
  • 确保url_for()里的endpoint和server.py中路由的endpoint一致(没显式指定的话就是视图函数名)。
  • 如果路由需要参数,一定要在url_for()里传递对应参数,不然会直接报错。

内容的提问来源于stack exchange,提问作者Dan Elbert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:14:45