python - Django模板没有迭代对象
问题描述
我正在使用 Django 来呈现项目菜单。我可以很好地得到我想要的内容,但是当我将它返回到 django 模板时,它只是一个 json 字符串,所以它不会迭代正确。我如何告诉 django 将其作为可迭代对象返回?
我遇到了这篇文章。也许我想合并查询集?
Python
def index(request):
if not request.user.is_authenticated:
return redirect('/login', {'message': None})
try:
menu_categories = MenuCategory.objects.all()
menu = []
for cat in menu_categories:
items = MenuCategoryItems.objects.filter(category_id=cat.id).all()
menu.append({'category': cat, 'items': items})
context = {'menu': menu}
# for cat in menu_categories:
# items = menu_items.filter(category_id=cat.id)
# category_items = []
# for item in items:
# category_items.append({
# "name": item.name,
# "price": float(item.price),
# "id": item.id
# })
# menu.append({"category": cat.name, "items": category_items})
except Exception:
print('failure')
return render(request, 'index.html', context)
模板
{% for category in menu %}
<div>{{ category.name }}</div>
{# {% for item in category.items %}#}
{# <div>{{ item.name }} | {{ item.price }}</div>#}
{# {% endfor %}#}
{% endfor %}
解决方案
我想我找到了答案。这对我有用,但我不确定这是否是“首选”方式。
Python
def index(request):
if not request.user.is_authenticated:
return redirect('/login', {'message': None})
try:
menu_categories = MenuCategory.objects.all()
menu = []
for cat in menu_categories:
items = MenuCategoryItems.objects.filter(category_id=cat.id).all()
menu.append({'category': cat, 'items': items.values})
context = {'menu': menu}
except Exception:
print('failure')
return render(request, 'index.html', context)
模板
{% for category in menu %}
<div><strong>{{ category.category.name }}</strong></div>
{% for item in category.items %}
<div>{{ item.name }} - {{ item.price }}</div>
{% endfor %}
{% endfor %}
推荐阅读
- python-3.x - 在 Python 中,secrets 模块如何制作完美的随机序列
- flutter - 使用 Realtime Firebase 创建 StreamBuilder 以在 Sensor 值发生变化时进行跟踪
- oracle - 如何解决 Oracle 的这个问题?
- php - 使用 PHP 的 IBM 云存储
- git - 将现有 Git Repo 转移到 GitHub 中,并将大文件添加到 LFS
- azure - 如何将 kubectl 任务的输出传递到 Azure Devops 中的下一个任务
- python - 无法按标签对熊猫列进行排序,似乎没有任何方法对我有用?
- python - 数据透视表的问题 - 信息被挤在一行中
- python - Django django-filter django-tables2 限制查询结果
- vue.js - 使用 Vue 对数据进行检查后,无法将复选框设置为未选中状态