我有一个方法需要显示我以排序方式从模型创建的一些数据。我试图将有序集传递给模板。这是方法:
def club_team_results(request, team_id):
"""Display detailed information for a specific team, including a list of results by event."""
team = Team.objects.get(pk=team_id)
team_events_list = EventDivisionTeam.objects.filter(team=team.id).order_by('division__start_date')
results={}
# Each match result is listed once, this team can be either of team or opposing_team
for r in Result.objects.filter(team=team):
results[r.id] = {'opponent': r.opposing_team.name,
'outcome': r.outcome,
'scores': r.scores,
'phase': r.phase,
'match': r.match,
'event_division_id': r.division.id,
}
for r in Result.objects.filter(opposing_team=team):
results[r.id] = {'opponent': r.team.name,
'outcome': r.outcome,
'scores': r.scores,
'phase': r.phase,
'match': r.match,
'event_division_id': r.division.id,
}
context = {'team_events_list': team_events_list, 'team_results': results, 'team': team, }
return render(request, 'rank/club_team_results.html', context)
我想传递按主键(r.id)排序的结果对象。我试过更换:
'team_results': results
与
'team_results': sorted(results.items())
在上下文赋值中,但在尝试对其进行排序时,没有数据传递给模板。请注意,此时我无法升级Django版本(今年夏天我会这样做),因此我坚持使用1.6(目前使用的是Python 3.3和Django 1.6)。任何帮助将不胜感激!
以下是显示结果列表的模板部分:
{% for usav_code, result in team_results.items %}
{% if result.event_division_id == event.division.id %}
<tr>
<td colspan="2"> </td>
<td class="alignleft">{{ result.phase }}</td>
<td class="alignleft">{{ result.match }}</td>
<td class="alignleft">{{ result.opponent }}</td>
<td class="alignleft">{{ result.outcome }}</td>
<td class="alignleft">{{ result.scores }}</td>
</tr>
{% endif %}
{% empty %}
<tr>
<td colspan="2"> </td>
<td colspan="5">No results to display.</td>
</tr>
{% endfor %}
如果我在上下文赋值语句中对结果使用sorted()方法,则模板中的结果列表会点击空标记并显示&#34;无结果显示。&#34;
答案 0 :(得分:0)
您的意思是什么意思没有数据通过sorted(results.items())
传递给模板?如果您可以获得元组列表而不是字典,那么这应该可行。具体来说,您可能需要sorted(results.items(), key=lambda x:x[0])
才能按键排序。
如果你想最终获得一个词典,也许你可以使用OrderedDict
。
然后执行OrderedDict(sorted(results.items(), key=lambda x:x[0]))
将返回已排序的字典。
答案 1 :(得分:0)
sorted(results.items())
的结果不再是dict
,而是list
的{{1}} - 但您仍在尝试拨打tuples
它在模板中。
变化:
.items()
为:
{% for usav_code, result in team_results.items %}
它将正确迭代元组列表。
默认情况下,Django会隐藏模板中的任何{% for usav_code, result in team_results %}
并且不返回任何内容,因此对不存在的AttributeError
方法的调用导致for循环为空。