
本文介绍在 flask 中实现从列表页点击申请人姓名跳转至其专属详情页的完整方案,核心是利用 url 查询参数(如 `?phone=123`)安全传递标识字段,并在目标路由中查询并渲染对应数据库记录。
在 Flask Web 开发中,实现“列表页 → 详情页”的数据联动是常见需求。关键在于:不直接传递整个对象或敏感数据,而是通过唯一标识符(如手机号、ID)作为 URL 参数进行轻量、可追溯的跳转。以下是分步实践指南:
✅ 第一步:修改列表页链接,动态注入查询参数
在你的 applicant-report.html 模板中,将静态链接 改为携带 phone 参数的动态链接:
{% for report in reports %}
<div class="rec_box">
<a class="text" href="/applicant-report?phone={{ a.phone }}">
{% for a in applicant %}
{% if a.phone == report.applicant_phone %}
{{ a.name }}
{% endif %}
{% endfor %}
</a>
<p class="rec_small">O: {{ (report.op * 100) | round(1) }}%</p>
<p class="rec_small">C: {{ report.co * 100 | round(1) }}%</p>
<p class="rec_small">E: {{ report.ex * 100 | round(1) }}%</p>
<p class="rec_small">A: {{ report.ag * 100 | round(1) }}%</p>
<p class="rec_small">N: {{ report.ne * 100 | round(1) }}%</p>
</div>
{% endfor %}? 提示:使用 {{ a.phone }} 确保每个链接携带对应申请人的唯一手机号;避免空值导致 404,可在模板中加 {% if a.phone %}...{% endif %} 安全包裹。
✅ 第二步:定义详情页路由,解析参数并查库
在 Flask 后端(如 app.py),新增 /applicant-report 路由,使用 request.args.get() 获取 URL 参数,并执行精确查询:
from flask import Flask, render_template, request
from your_models import Applicant, db # 替换为实际模型路径
@app.route('/applicant-report')
def applicant_report():
phone = request.args.get('phone', '').strip()
if not phone:
return "⚠️ 错误:未提供申请人手机号", 400
applicant = Applicant.query.filter_by(phone=phone).first()
if not applicant:
return "❌ 未找到该申请人信息", 404
return render_template('applicant-detail.html', applicant=applicant)⚠️ 注意事项:
- 始终校验参数是否存在(.get('phone', '') + if not phone);
- 使用 .first() 而非 .all(),确保只取单条匹配记录;
- 若 phone 非唯一字段,建议改用主键 id(更健壮),链接改为 ?id={{ a.id }},查询改为 filter_by(id=id)。
✅ 第三步:创建详情页模板,安全渲染数据
新建 applicant-detail.html,直接使用传入的 applicant 对象渲染:
<h2>申请人详情:{{ applicant.name }}</h2>
<ul>
<li>电话:{{ applicant.phone }}</li>
<li>邮箱:{{ applicant.email or '未填写' }}</li>
<li>学历:{{ applicant.education or '未知' }}</li>
<!-- 其他字段 -->
</ul>
<a href="{{ url_for('index') }}">← 返回列表页</a>? 安全提醒(重要!)
- ✅ 推荐使用 id(整型主键)代替 phone 作为路由参数,避免特殊字符、空格或隐私暴露风险;
- ❌ 切勿通过 URL 传递密码、token、身份证号等敏感信息;
- ✅ 生产环境建议对 id 做存在性校验与权限控制(如当前用户是否有权查看该申请人);
- ✅ 可配合 url_for() 构建链接(更灵活):
<a href="{{ url_for('applicant_report', phone=a.phone) }}">查看</a>
通过以上三步,即可实现简洁、可靠、符合 Web 最佳实践的数据页间传递。核心思想始终是:URL 传标识,后端查实体,模板只负责展示。










