Python Flask实现表格name列绑定link列URL超链接并移除link列
实现方法
不需要调整后端传参代码,直接修改Jinja2模板的渲染逻辑即可,具体改动如下:
- 表头渲染阶段跳过
link列,不在表头展示该列名称 - 单元格渲染阶段做分支判断:
- 遍历到
name列时,将单元格内容渲染为超链接,跳转地址取当前行对应的link列值,添加新标签页打开属性 - 遍历到其他非
link列时正常渲染文本 - 遍历到
link列直接跳过,不渲染该列单元格
- 遍历到
修改后的完整表格模板代码如下:
<div style="position:relative; z-index: 1; top:-125px;"> <table id="table_id" class="display compact" style="width:100%"> <thead> <tr> {% for col in column_names %} {% if col != 'link' %} <th>{{ col }}</th> {% endif %} {% endfor %} </tr> </thead> <tbody> {% for row in row_data %} <tr> {% for col, row_ in zip(column_names, row) %} {% if col == 'name' %} {% set row_link = row[column_names.index('link')] %} <td> <a href="{{ row_link if row_link.startswith(('http://', 'https://')) else 'https://' + row_link }}" target="_blank" rel="noopener noreferrer"> {{ row_ }} </a> </td> {% elif col != 'link' %} <td>{{ row_ }}</td> {% endif %} {% endfor %} </tr> {% endfor %} </tbody> </table> </div>
关键说明
target="_blank"属性实现点击链接后在新标签页打开,搭配rel="noopener noreferrer"避免新页面拿到原页面权限,是常规的安全写法- 代码里加了链接协议自动补全逻辑,示例里的
www.google.com这类不带http/https前缀的地址会自动补全https://,避免被浏览器识别为站内相对路径导致跳转失败 - 通过
column_names.index('link')动态获取link列的位置索引,后续就算调整DataFrame的列顺序,这段逻辑也能正确取到每行对应的链接地址,不会因为硬编码索引失效
如果不想在模板里写判断逻辑,也可以在后端先处理DataFrame:把name列拼接为带a标签的HTML字符串,再drop掉link列后再传值给模板,但这种方式把展示层逻辑耦合在后端,灵活性不如直接修改模板。
内容的提问来源于stack exchange,提问作者Nicholas
相关产品推荐
相关产品推荐

