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

Flask模板{{}}传递变量:数据库图片显示的语法问题

解决Flask模板中显示数据库存储图片名对应图片的问题

我来帮你梳理清楚问题所在和正确的实现方式:

1. 修正HTML模板中的图片路径写法

你之前的代码错误嵌套了Jinja2模板语法({{}}里又套了一层{{}}),这会导致模板解析失败。正确的做法是直接把数据库返回的图片名变量和静态目录路径拼接,Jinja2支持两种拼接方式:

<!-- 方式1:用+拼接字符串 -->
<img src="{{ url_for('static', filename='img/' + rows.infor_image) }}" style="width:50%; height:60%;">

<!-- 方式2:用Jinja2专属的~拼接符 -->
<img src="{{ url_for('static', filename='img/' ~ rows.infor_image) }}" style="width:50%; height:60%;">

2. 后端正确传递数据库数据到模板

你的后端代码目前只执行了查询,但没有取出记录也没有传递给模板,这里是完整的后端实现示例:

@app.route('/herbsinfo/<id>')
def landing_page(id):
    cur = mysql.connection.cursor()
    # 用参数化查询避免SQL注入,把id作为参数传入
    result = cur.execute("SELECT infor_image, other_fields... FROM your_table_name WHERE id = %s", (id,))
    
    if result > 0:
        # 获取单条匹配记录(如果是多条结果,改用cur.fetchall())
        rows = cur.fetchone()
        cur.close()
        # 将查询结果传递给模板,模板里就能通过rows.infor_image访问图片名
        return render_template('your_template_file.html', rows=rows)
    else:
        cur.close()
        return "No herb information found for this ID"

3. 额外注意事项

  • 确保图片文件确实存放在项目的static/img/目录下,文件名和数据库中infor_image字段的值完全一致(Linux系统对文件名大小写敏感,这点要特别注意)
  • 如果查询返回多条记录(比如列表页场景),后端用cur.fetchall()获取所有记录,模板里需要用循环遍历:
    {% for row in rows %}
        <img src="{{ url_for('static', filename='img/' + row.infor_image) }}" style="width:50%; height:60%;">
    {% endfor %}
    

内容的提问来源于stack exchange,提问作者Patiphon Ongartittichai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:53:19