(Flask)为什么我的 HTML 中的 Jinja 块没有获取从 SQLAlchemy 查询传递的所有 table 条目?
(Flask) Why doesn't the Jinja block in my HTML get all the table entries passed from a SQLAlchemy query?
我正在尝试发送 table 个条目以显示在 HTML 上使用 Jinja 通过从具有特定约束的路由函数返回的 SQLAlchemy 查询结果(第二段)但只有一个条目这使它成为 Jinja 代码。
此处的目标是显示给定产品的信息及其包含的订单(即使该订单中除给定产品外还有其他产品)。
实际上,所有这些信息都正确显示在 HTML table 中,但为了便于阅读,我删除了它们的代码。
@app.route('/<int:product_id>/product_details', methods=['GET'])
def product_details(product_id):
order_list = Order.query.all()
product = Products.query.filter_by(product_id=product_id).first()
for order_to_process in order_list:
product_list = order_to_process.product_list.split("\n")
for prod in product_list [:-1]:
prod_info = prod.split(":")
if product_id == int(prod_info[0]):
orders = Order.query.filter_by(product_list=order_to_process.product_list)
if order_list:
return render_template('/product_details.html', product=product, orders=orders)
else:
return render_template('/product_details.html', product=product)
{% for order in orders %}
{{order.order_id}}
{{order.client_id}}
{{order.order_date}}
{{order.order_address}}
{% set product_list = order.product_list.split("\n") %}
{% for prod in product_list[:-1] %}
{% set prod_info = prod.split(":") %}
{{prod_info[0]}}
{{prod_info[1]}}
{{prod_info[2]}}
{% endfor %}
{{order.total_price}}
{{order.paiment_method}}
{{order.status}}
{% endfor %}
产品table型号:
Product
product_id: int
product_name: string
product_description: string
product_price: float
product_quantity: int
product_category: string
product_image_url: string
订单table型号:
Order
order_id: int
client_id: int
order_date: string
order_address: string
product_list: string
total_price: float
paiment_method: string
status: string
"product_list" 格式如下:
"product_id:product_name:quantity\n"
“数量”经过计算,与产品中存在的数量不同 table
编辑:
更正了拼写错误:“liste_prods”到“product_list”(变量和东西最初是用法语命名的,我为这个问题翻译了它,但忘记了那个)
在每个循环周期中,您都将覆盖之前的 orders
变量。您需要将查询结果添加到列表中。
@app.route('/<int:product_id>/product_details', methods=['GET'])
def product_details(product_id):
orders = []
order_list = Order.query.all()
product = Products.query.filter_by(product_id=product_id).first()
for order_to_process in order_list:
product_list = order_to_process.product_list.split("\n")
for prod in liste_prods[:-1]:
prod_info = prod.split(":")
if product_id == int(prod_info[0]):
orders.extend(Order.query.filter_by(liste_product=order_to_process.product_list))
if order_list:
return render_template('/product_details.html', product=product, orders=orders)
else:
return render_template('/product_details.html', product=product)
'liste_prods'从何而来?
也许你可以试试这个:
product = Products.query.get(product_id)
return render_template('/product_details.html', product=product)
在订单中使用{{product.orders}} html
最终解决方案:
@app.route('/<int:product_id>/product_details', methods=['GET'])
def product_details(product_id):
orders = []
order_list = Order.query.all()
product = Products.query.filter_by(product_id=product_id).first()
for order_to_process in order_list:
product_list = order_to_process.product_list.split("\n")
for prod in product_list [:-1]:
prod_info = prod.split(":")
if product_id == int(prod_info[0]):
orders_var = Order.query.filter_by(product_list=order_to_process.product_list)
for order_var in orders_var:
if order_var not in orders:
orders.extend(Order.query.filter_by(product_list=order_to_process.product_list))
if len(orders) > 0:
return render_template('/product_details.html', product=product, orders=orders)
else:
return render_template('/product_details.html', product=product)
我正在尝试发送 table 个条目以显示在 HTML 上使用 Jinja 通过从具有特定约束的路由函数返回的 SQLAlchemy 查询结果(第二段)但只有一个条目这使它成为 Jinja 代码。
此处的目标是显示给定产品的信息及其包含的订单(即使该订单中除给定产品外还有其他产品)。
实际上,所有这些信息都正确显示在 HTML table 中,但为了便于阅读,我删除了它们的代码。
@app.route('/<int:product_id>/product_details', methods=['GET'])
def product_details(product_id):
order_list = Order.query.all()
product = Products.query.filter_by(product_id=product_id).first()
for order_to_process in order_list:
product_list = order_to_process.product_list.split("\n")
for prod in product_list [:-1]:
prod_info = prod.split(":")
if product_id == int(prod_info[0]):
orders = Order.query.filter_by(product_list=order_to_process.product_list)
if order_list:
return render_template('/product_details.html', product=product, orders=orders)
else:
return render_template('/product_details.html', product=product)
{% for order in orders %}
{{order.order_id}}
{{order.client_id}}
{{order.order_date}}
{{order.order_address}}
{% set product_list = order.product_list.split("\n") %}
{% for prod in product_list[:-1] %}
{% set prod_info = prod.split(":") %}
{{prod_info[0]}}
{{prod_info[1]}}
{{prod_info[2]}}
{% endfor %}
{{order.total_price}}
{{order.paiment_method}}
{{order.status}}
{% endfor %}
产品table型号:
Product
product_id: int
product_name: string
product_description: string
product_price: float
product_quantity: int
product_category: string
product_image_url: string
订单table型号:
Order
order_id: int
client_id: int
order_date: string
order_address: string
product_list: string
total_price: float
paiment_method: string
status: string
"product_list" 格式如下:
"product_id:product_name:quantity\n"
“数量”经过计算,与产品中存在的数量不同 table
编辑: 更正了拼写错误:“liste_prods”到“product_list”(变量和东西最初是用法语命名的,我为这个问题翻译了它,但忘记了那个)
在每个循环周期中,您都将覆盖之前的 orders
变量。您需要将查询结果添加到列表中。
@app.route('/<int:product_id>/product_details', methods=['GET'])
def product_details(product_id):
orders = []
order_list = Order.query.all()
product = Products.query.filter_by(product_id=product_id).first()
for order_to_process in order_list:
product_list = order_to_process.product_list.split("\n")
for prod in liste_prods[:-1]:
prod_info = prod.split(":")
if product_id == int(prod_info[0]):
orders.extend(Order.query.filter_by(liste_product=order_to_process.product_list))
if order_list:
return render_template('/product_details.html', product=product, orders=orders)
else:
return render_template('/product_details.html', product=product)
'liste_prods'从何而来? 也许你可以试试这个:
product = Products.query.get(product_id) return render_template('/product_details.html', product=product)
在订单中使用{{product.orders}} html
最终解决方案:
@app.route('/<int:product_id>/product_details', methods=['GET'])
def product_details(product_id):
orders = []
order_list = Order.query.all()
product = Products.query.filter_by(product_id=product_id).first()
for order_to_process in order_list:
product_list = order_to_process.product_list.split("\n")
for prod in product_list [:-1]:
prod_info = prod.split(":")
if product_id == int(prod_info[0]):
orders_var = Order.query.filter_by(product_list=order_to_process.product_list)
for order_var in orders_var:
if order_var not in orders:
orders.extend(Order.query.filter_by(product_list=order_to_process.product_list))
if len(orders) > 0:
return render_template('/product_details.html', product=product, orders=orders)
else:
return render_template('/product_details.html', product=product)