javascript - 尝试遍历 django 模板中的嵌套字典
问题描述
我正在尝试通过 django 模板中的字典和 for 循环内部使用 for 循环,我试图嵌套另一个 for 循环来循环通过说数量来显示那些产品的许多图像 -
模板是这样的——
{% for product_id, item in b_data.items %}
{% for i in item.numItems %}
<div class="col-md-4 mb-4">
<div class="card" style="width: 18rem;">
<img src="/media/{{item.image}}" class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">{{item.title}}</h5>
<p class="card-text">{{product_id}} {{item.qty}}</p>
<div class="card-footer">
<a href="#" class="btn btn-primary"><i class="bi bi-cart2"></i></a>
</div>
</div>
</div>
</div>
{% endfor %}
{% endfor %}
views.py 如下所示 -
def make_your_box(request):
box_p = {}
box_p[str(request.GET['id'])]={
'image':request.GET['image'],
'title':request.GET['title'],
'qty':request.GET['qty'],
'price':request.GET['price'],
'numItems': list(range(1, int(request.GET['qty'])+1)),
}
print(box_p)
if 'boxdata' in request.session:
if str(request.GET['id']) in request.session['boxdata']:
box_data=request.session['boxdata']
box_data[str(request.GET['id'])]['qty']=int(box_data[str(request.GET['id'])]['qty'])+1
box_data[str(request.GET['id'])]['numItems']=list(range(1,int(box_data[str(request.GET['id'])]['qty'])+1)),
box_data.update(box_data)
request.session['boxdata']=box_data
else:
box_data=request.session['boxdata']
box_data.update(box_p)
request.session['boxdata']=box_data
else:
request.session['boxdata']=box_p
print(request.session['boxdata'])
print(len(request.session['boxdata']))
x = 0
for prodid, item in request.session['boxdata'].items():
x = x + int(item['qty'])
print(x)
t_box=render_to_string('ajax/TestSelect1_1.html',{'b_data':request.session['boxdata']})
return JsonResponse({'b_data':t_box})
即使在打印 stmts 在命令提示符下输出正确的输出,如下所示 -
[06/Nov/2021 23:05:30] "GET /TestSelect1 HTTP/1.1" 200 13945
[06/Nov/2021 23:05:30] "GET /media/product_imgs/IMG_0910.JPG HTTP/1.1" 200 3462312
{'5': {'image': 'product_imgs/RedCookies.jpg', 'title': 'Strawberry Cookies', 'qty': '1', 'price': '10', 'numItems': [1]}}
{'5': {'image': 'product_imgs/RedCookies.jpg', 'title': 'Strawberry Cookies', 'qty': '1', 'price': '10', 'numItems': [1]}}
1
1
[06/Nov/2021 23:05:37] "GET /make_your_box?id=5&qty=1&title=Strawberry%20Cookies&price=10&image=product_imgs%2FRedCookies.jpg HTTP/1.1" 200 619
{'5': {'image': 'product_imgs/RedCookies.jpg', 'title': 'Strawberry Cookies', 'qty': '1', 'price': '10', 'numItems': [1]}}
{'5': {'image': 'product_imgs/RedCookies.jpg', 'title': 'Strawberry Cookies', 'qty': 2, 'price': '10', 'numItems': ([1, 2],)}}
1
2
[06/Nov/2021 23:05:49] "GET /make_your_box?id=5&qty=1&title=Strawberry%20Cookies&price=10&image=product_imgs%2FRedCookies.jpg HTTP/1.1" 200 619
{'6': {'image': 'product_imgs/IMG_0903.JPG', 'title': 'Decoupage', 'qty': '1', 'price': '20', 'numItems': [1]}}
{'5': {'image': 'product_imgs/RedCookies.jpg', 'title': 'Strawberry Cookies', 'qty': 2, 'price': '10', 'numItems': [[1, 2]]}, '6': {'image': 'product_imgs/IMG_0903.JPG', 'title': 'Decoupage', 'qty': '1', 'price': '20', 'numItems': [1]}}
2
3
[06/Nov/2021 23:06:51] "GET /make_your_box?id=6&qty=1&title=Decoupage&price=20&image=product_imgs%2FIMG_0903.JPG HTTP/1.1" 200 1213
{'6': {'image': 'product_imgs/IMG_0903.JPG', 'title': 'Decoupage', 'qty': '1', 'price': '20', 'numItems': [1]}}
{'5': {'image': 'product_imgs/RedCookies.jpg', 'title': 'Strawberry Cookies', 'qty': 2, 'price': '10', 'numItems': [[1, 2]]}, '6': {'image': 'product_imgs/IMG_0903.JPG', 'title': 'Decoupage', 'qty': 2, 'price': '20', 'numItems': ([1, 2],)}}
2
4
[06/Nov/2021 23:06:54] "GET /make_your_box?id=6&qty=1&title=Decoupage&price=20&image=product_imgs%2FIMG_0903.JPG HTTP/1.1" 200 1213
但是模板没有按预期显示那么多图像,看起来它没有循环遍历上面粘贴的模板中提到的 item.numItems - 任何专家都可以看看解释可能发生的事情......
多谢。
解决方案
您的内部 for 循环格式将导致错误的结果:
{% for i in >>>item.numItems<<< %}
您应该将其更改为range
for 循环。像这样:
{% for i in '0123456789'|make_list %}
{{ i }}
{% endfor %}
或者像这样:
{% for i in range(item.numItems) %}
{{ i }}
{% endfor %}