【发布时间】:2021-01-18 22:36:42
【问题描述】:
我正在尝试构建的一个小型电子商务项目的一部分。
显示 order_info 的 views.py 函数
@login_required
def past_orders_view(request):
print (request.user)
allOrders = Order.objects.filter(full_name=request.user)
return render(request, "orders.html", {'Orders':allOrders})
来自 db 的 allOrders 查询集看起来像,它将显示特定登录用户的订单:
<QuerySet[<Order: 13-{'Zenbook 14': '82990.00', 'iPhone 11 64gb': '61999.00'}-godric-+919871199215>]>
在模板中,我有这样的东西:
<table class="table table-striped">
<head>
<tr>
<th> Ordered Date </th>
<th> Status </th>
<th> Product Name </th>
<th> Price </th>
</tr>
</thead>
<tbody>
{% for order in Orders %}
<tr>
<td> {{order.date}} </td>
<td> {{order.status}} </td>
<td> {{ order.items_json }} </td>
<td> {{ order.items_json }} </td>
</tr>
{% endfor %}
</table>
另外,在 view.py 中,Order 的模型对象在下订单时会保存这些信息
order = Order(items_json=items_json, full_name=name, town_or_city=city,
phone_number=phone, status=status, date=timezone.now())
order.save()
所以,full_name、status、date等Order对象可以通过模板中的for循环直接访问,并显示出来根据 HTML 中的需要。有问题的部分是遍历以产品名称为键,以价格为值的字典。 已经尝试过嵌套for循环,没有得到答案。
尝试过的循环示例:
{% for order in Orders %}
<tr>
{% for key,value in order.items_json.items %}
<tr>
<td> {{order.date}} </td>
<td> {{order.status}} </td>
<td> {{ key}} </td>
<td> {{ value }} </td>
</tr>
{% endfor %}
</tr>
{% endfor %}
需要帮助!!!
【问题讨论】:
-
呈现的 HTML 中实际出现了什么?服务器控制台有信息吗?
-
当我尝试循环示例(上述问题的最后一部分)时,它无法显示任何内容。虽然当我显示 order.items_json 时,在通过单个 for 循环遍历 Orders 时,这会显示 {'Zenbook 14': '82990.00', 'iPhone 11 64gb': '61999.00'}
-
我怀疑
order.items_json实际上是一个字符串而不是字典。我会考虑在您的 Python 代码中将其转换为字典(可能循环通过orders并使用真正的字典按顺序分配新属性。 -
是的!你是对的。在 view.py 中检查了它的类型,发现它是一个带有字典的字符串。在 orders 上的正则表达式的帮助下解决了它,然后使用 eval 将其转换回字典。感谢您指出! :-)
标签: python html django django-templates