Используя представление я генерироваться следующим словарным составом:Джанго: Визуализация словаря в пределах словаря и элементы
{'badge-bronze': {'badge_recipients': [<User: aa>, <User: ni>], 'badge': 'badge-bronze', 'page_class': 'meta'}, 'badge-silver': {'badge_recipients': [<User: ni>], 'badge': 'badge-silver', 'page_class': 'meta'}, 'badge-gold': {'badge_recipients': [<User: ni>], 'badge': 'badge-gold', 'page_class': 'meta'}}
Вот как я создал словарь (включен только ту часть, где я построить словарь)
def contest(request):
all_badges = badge_data.BADGES.keys()
data = {}
for badge in all_badges:
if badge == 'badge-bronze' or badge == 'badge-silver' or badge == 'badge-gold':
badge_data_info = get_object_or_404(BadgeData, slug=badge)
badge_recipients = User.objects.filter(
award_user__badge = badge_data_info
).annotate(
last_awarded_at = Max('award_user__awarded_at'),
award_count = Count('award_user')
).order_by(
'-last_awarded_at'
)
data[badge] = {
'badge_recipients' : badge_recipients,
'badge' : badge_data_info,
'page_class': 'meta',
}
#import pdb
#pdb.set_trace()
return render(request, 'contest.html', {'data':data})
в моем шаблоне я попытался сделать его следующим образом:
<div id="award-list">
{% for key,value in data.items %}
<li>key</li>
{% for recipient in value.badge_recipients %}
<div class="user">
<span class="thumb">{{ gravatar(recipient, 32) }}</span>
<span><a href="{{ recipient.get_absolute_url() }}">{{recipient.username|escape}}</a></span>
<span>{{ macros.user_score_and_badge_summary(user) }}</span>
</div>
{% endfor %}
{% endfor %}
</div>
, но я получаю сообщение об ошибке, поскольку данные не определены, а также ничего не получают. На основании полученных ответов я внес изменения, и теперь моя ошибка выглядит следующим образом: 'builtin_function_or_method' object is not iterable
Я получил эту ошибку: «builtin_function_or_method» объект не Iterable –
Вы можете редактировать свой пост и показать, как выглядит ваш код сейчас? –
только что отредактировал его. –