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
相关产品推荐
相关产品推荐

