django - Django-在模板中打印字典

标签 django django-templates django-1.10

我将字典my_var的字典定义为:

defaultdict(<class 'collections.Counter'>,{
    'product1': Counter({'total_qty': 1}),
    'product2': Counter({'total_qty': 13}),
    'product3': Counter({'total_qty': 65})
})


我将其传递给模板:

context = {'my_var': my_var}
return render(request, 'my_template.html', context)


在模板中,我尝试在没有运气的情况下进行打印:

<ul>
    {% for k in my_var %}
        <li>{{ k.component }}: {{ k.total_qty }}</li>
    {% endfor %}
</ul>


我没有错误,但是没有键和值。我究竟做错了什么?

我得到类似的东西:







编辑:

为了增加一些上下文,我最初有一个字典列表:

used_components = [{'total_qty': 5, 'component': 'component blue'},...]


然后我使用此功能按键对字典进行分组和求和:

def solve(dataset, group_by_key, sum_value_keys):
    dic = defaultdict(Counter)
    for item in dataset:
        key = item[group_by_key]
        vals = {k: item[k] for k in sum_value_keys}
        dic[key].update(vals)
    return dic

my_var = solve(used_components, 'component', ['total_qty'])


然后我尝试如上所述在模板中打印my_var

编辑2:

这是我的实际views.py:

def solve(dataset, group_by_key, sum_value_keys):
    dic = defaultdict(Counter)
    for item in dataset:
        key = item[group_by_key]
        vals = {k: item[k] for k in sum_value_keys}
        dic[key].update(vals)
    return dic

def components_by_season(request, season_name):
    season = get_object_or_404(Season, name=season_name)

    orderitems = OrderItem.objects.filter(order__season__name=season_name)

    # variant_ids = OrderItem.objects.filter(order__season__name=season_name).values_list('variant_id', flat=True)
    # components = Component.objects.filter(bom__variant__id__in=variant_ids)

    used_components = []

    for item in orderitems:
        variant_ordered_qty = item.qty
        components = Component.objects.filter(boms__variant__id__exact=item.variant.id)
        for component in components:
            bom_qty = component.boms.get(component=component).qty
            total_qty = bom_qty * variant_ordered_qty
            used_components.append({
                'component': component.name.encode('ascii', 'ignore'),
                'total_qty': total_qty
            })

    out = solve(used_components, 'component', ['total_qty'])

    # counter = Counter(used_components)

    context = {'season': season, 'orderitems': orderitems, 'used_components': used_components, 'out': out}
    return render(request, 'components_by_season.html', context)

最佳答案

假设这实际上是您的真实代码,my_var是字典,而不是列表。遍历一个字典只会给你键。如果还需要这些值,则应遍历.items()。所以:

<ul>
    {% for k, v in my_var.items %}
        <li>{{ k }}: {{ v.total_qty }}</li>
    {% endfor %}
</ul>


另请注意,没有product键。产品名称只是外部字典中的关键。

关于django - Django-在模板中打印字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43030196/

相关文章:

python - 从 Django 1.10 中的 Django url 提供完全静态(文档)网站

python - Django URL 类型错误 : view must be a callable or a list/tuple in the case of include()

Django ajax 使用 Jquery 注释?

django - 如何在django python中压缩上传的图像

python - 保存在DB中的Django Json如何在模板中使用?

python - 我的应用程序的管理模板与内置模板的优先级

django - 如何避免在 Django 中进行 n+1 选择?

Django ,邮件未发送。发送网格

django - 如何从 django 的开发服务器提供 Angular 2 应用程序?