gpt4 book ai didi

python - 在 Django 模板中循环 DefaultDict 时出现奇怪的运行时错误

转载 作者:太空宇宙 更新时间:2023-11-03 15:10:05 24 4
gpt4 key购买 nike

使用 Django 1.5.1

我这里有一个简单的代码-

count_by_media_type = defaultdict(int)
for user_media in user_media_data:
count_by_media_type[user_media['media_type']] += 1

这是 View 的一部分,使用 for 迭代循环在模板中呈现 -

{% for media_type in count_by_media_type %}
..........
{% endfor %}

count_by_media_type 的值就在 render_to_response 之前循环中的方法是 defaultdict(<type 'int'>, {u'photo': 1, u'audio': 4, u'video': 3})

但不知何故,在渲染时,迭代中存在运行时错误

dictionary changed size during iteration

count_by_media_type的值如模板上下文中所见,变为

defaultdict(<type 'int'>, {u'photo': 1, u'audio': 4, u'video': 3, u'media_type': 0})

这很奇怪,因为新 key media_type进入变量了吗?

现在,当我切换上面的代码时,在 View 中提到了

count_by_media_type = Counter([user_media['media_type'] for user_media in user_media_data])

一切正常。

有任何线索吗?

最佳答案

由于模板变量查找的工作方式,使用 defaultdict 会导致 Django 模板出现奇怪的行为。查看 Django docs幕后框.

Django 文档建议在传递给模板之前将 defaultdict 转换为常规 dict

count_by_media_type = defaultdict(int)
for user_media in user_media_data:
count_by_media_type[user_media['media_type']] += 1

count_by_media_type = dict(count_by_media_type)

或者,as this answer suggests , 您可以在完成插入值后禁用默认功能。

count_by_media_type.default_factory = None

关于python - 在 Django 模板中循环 DefaultDict 时出现奇怪的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27985596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com