我有一种方法需要显示一些数据,这些数据是以已排序方式从模型中创建的。我正在尝试将有序集合传递给模板。这里的方法:如何将已排序的列表(字典列表)传递给Django 1.6模板
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()时,包括添加key = lambda x:x [0]的示例,我打开列表的{%for%}迭代器上的{%empty%}标记。如果我没有排序(),那么列表显示正确,但未排序。我会看看是否可以在原始帖子的代码段中添加模板的相应部分。 –
我刚刚在Django 1.10文档中看到1.10增加了sorted()在“列表清单”上的工作能力。这可能与我遇到的问题有关吗?我是Django 1.6 ... –