使用SQLAlchemy在html模板中渲染图像

时间:2019-02-17 09:12:41

标签: python sql flask-sqlalchemy

我正在尝试在页面中渲染图像。我将图像的本地URL存储在数据库中,以便可以在html文件中获取该URL,从而显示图像。但是发生的是该图像没有显示。

我单独打开了html文件,并且图像已成功渲染,但是在python代码中运行并运行服务器时,图像出现了问题。

  

这是数据库声明(python代码)的一项示例

cable1 = SectionItem(
name='Remax',
price='$3.99',
description='AUX Metal Cable - 3.5mm - 100Cm Male To Male',
image_url='img/cables/cable1.jpg',
category=cables
)

这很好。

  

这是用于渲染图像的SQLAlechemy

from flask import Flask, render_template, request, redirect, url_for,
flash
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from database import Base
from database import Accessory, AccessorySection, SectionItem

app = Flask(__name__)

engine = create_engine('sqlite:///mobilystore.db')
Base.metadata.bind = engine
DBSession = sessionmaker(bind=engine)
session = DBSession()


@app.route('/')
@app.route('/mobily')
def mobilystore():
    all_cables = session.query(SectionItem).filter(
        SectionItem.store_id == 1).all()
    return render_template(
        'mainpage.html', all_cables=all_cables)


if __name__ == '__main__':
    app.debug = True
    app.run(host='0.0.0.0', port=5000)

服务器也可以在终端中正常运行。

  

这是我的模板文件夹中的html文档

<html>
    <body>
        <h1>Mobily Store</h1>
    </br>  
        {% for i in all_cables %}
        <div>
            <img src="{{i.image_url}}" alt="cable img">
            <p> {{i.description}} </p>
            <p> {{i.price}} </p>
    </br>
        </div>
        {%endfor%}

    </body>
</html>

显示价格和说明,但不显示图像。

请注意,我将图像放在模板文件夹内的img文件夹中(同一文件夹包含我的html文件)。

这是github上的my-project,可为您提供完整的见识

1 个答案:

答案 0 :(得分:0)

您必须将templates/img文件夹移至static/img,并在模板中使用url_for函数打印图像路径:

<img src="{{ url_for('static', filename=i.image_url) }}" alt="cable img">