def create_archive_list(_query): """ given a sorted queryset, return a list in the format: archive_list = [{'2009': [{'December': ['entry1', 'entry2']}, {'January': ['entry3', 'entry4']} ] }, {'2008': [{'January': ['entry5', 'entry6']}, ] } ] """ archive_list = [] tmp_months_list = [] tmp_year_list = [] for item in _query: if item.pub_date.year not in tmp_year_list: tmp_year_list.append(item.pub_date.year) tmp_dict = {} tmp_dict[item.pub_date.year] = [] archive_list.append(tmp_dict) else: pass for entry in _query: for item in archive_list: _year = entry.pub_date.year if _year in item: _tmp_month = entry.pub_date.strftime("%B") # make a dictionary with the month name as a key and an empty list as a value tmp_dict = {} tmp_dict[_tmp_month] = [] if tmp_dict not in item[_year]: item[_year].append(tmp_dict) for entry in _query: # dict in list for item in archive_list: # year of entry _year = entry.pub_date.year if _year in item: _year_list = item[_year] for _dict_month in _year_list: _tmp_month = entry.pub_date.strftime("%B") if _tmp_month in _dict_month: _dict_month[_tmp_month].append(entry) return archive_list def very_archive(request): query = Entry.objects.all().order_by('-pub_date') object_years_dict = create_archive_list(query) return render_to_response('ideas/ideas_index.html', {'archive_list': object_years_dict})