[Django]-Weird runtime error when looping over DefaultDict in django template

4👍

Using defaultdicts causes weird behaviour in Django templates, because of the way template variable lookups work. See the Behind the scenes box of the Django docs.

The Django docs suggest converting the defaultdict to a regular dict before passing to the template.

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)

Or, as this answer suggests, you can disable the defaulting feature after you have finished inserting values.

count_by_media_type.default_factory = None

Leave a comment