属性错误:';列表';对象没有属性';产品img和x27;Python、烧瓶、SQLite

属性错误:';列表';对象没有属性';产品img和x27;Python、烧瓶、SQLite,python,html,sqlite,flask,Python,Html,Sqlite,Flask,我试图在SQLite数据库的模板上显示文本和图像。 数据库模型: class NewProduct(db.Model): id = db.Column(db.Integer, primary_key=True) product_name = db.Column(db.String(100), nullable=False) product_description = db.Column(db.String(200), nullable=False) product

我试图在SQLite数据库的模板上显示文本和图像。 数据库模型:

class NewProduct(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    product_name = db.Column(db.String(100), nullable=False)
    product_description = db.Column(db.String(200), nullable=False)
    product_date = db.Column(db.DateTime, default=datetime.utcnow)
    product_img = db.Column(db.BLOB())

    def __repr__(self):
        return '<NewProduct %r>' % self.id
HTML:


{如果乘积|长度>0%}
{产品中el的百分比%}
名称:{el.product_Name}

描述:{el.product_Description}

图片:

日期:{el.product_Date}

{%endfor%} {%else%} 没有产品

{%endif%}
因此,我得到一个错误:
AttributeError:'list'对象在
product\u img=b64encode(products.product\u img).decode('utf-8')行中没有属性'product\u img'


我这样做是为了这个。但我还是犯了这个错误。我正在做什么?我如何修复它?

产品
是一个列表,因此行
产品。产品\u img
会引发您面临的错误。如果您需要将图像转换为其他内容,则需要在
产品上循环并修改每个产品的图像。

您尝试访问
产品的
列表,而不是在单个对象上。您需要迭代对象并更新每个对象的值:

@app.route('/products')
def products():
    products = NewProduct.query.order_by(NewProduct.product_date.desc()).all()
    for product in products:
        product.product_img = b64encode(product.product_img).decode('utf-8')
    return render_template('products.html', products=products)
然后更新模板以从
产品
对象获取值:

<body>
{% if products|length > 0 %}

    {% for el in products %}
        <p>Name: {{ el.product_name }}</p>
        <p>Description: {{ el.product_description }}</p>
        <p>Image: </p> <img src="data:;base64,{{ el.product_img }}">
        <p>Date: {{ el.product_date }}</p>
    {% endfor %}

{% else %}
    <p>There are have no products</p>
{% endif %}

{如果乘积|长度>0%}
{产品中el的百分比%}
名称:{el.product_Name}

描述:{el.product_Description}

图片:

日期:{el.product_Date}

{%endfor%} {%else%} 没有产品

{%endif%}
我还建议从变量中删除前缀
product
,因为它似乎是多余的,并且会降低代码的可读性

@app.route('/products')
def products():
    products = NewProduct.query.order_by(NewProduct.product_date.desc()).all()
    for product in products:
        product.product_img = b64encode(product.product_img).decode('utf-8')
    return render_template('products.html', products=products)
<body>
{% if products|length > 0 %}

    {% for el in products %}
        <p>Name: {{ el.product_name }}</p>
        <p>Description: {{ el.product_description }}</p>
        <p>Image: </p> <img src="data:;base64,{{ el.product_img }}">
        <p>Date: {{ el.product_date }}</p>
    {% endfor %}

{% else %}
    <p>There are have no products</p>
{% endif %}