2017-03-02 4 views
0

モデルから作成したデータをソートして表示する必要があるメソッドがあります。順序付きセットをテンプレートに渡そうとしています。メソッドは次のとおりです。ソートされたリスト(辞書のリスト)を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">&nbsp;</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">&nbsp;</td> 
     <td colspan="5">No results to display.</td> 
    </tr> 
{% endfor %} 

、その後、テンプレート内の結果リストがヒット空のタグを表示し、「表示する結果がありません」と表示します。

答えて

0

sorted(results.items())の結果は、それがtupleslistで、もはやdictではありません - しかし、あなたはまだ、テンプレートでそれに.items()を呼び出すようにしようとしています。

変更:

{% for usav_code, result in team_results.items %} 

へ:

{% for usav_code, result in team_results %} 

、それが正しくタプルのリストを反復します。

デフォルトでは、Djangoはテンプレートに含まれるAttributeErrorを隠し、何も返さないため、存在しない.items()メソッドを呼び出すと、forループが空になりました。

0

sorted(results.items())でテンプレートにデータが渡されないということを意味しますか?辞書の代わりにタプルのリストを取得しても問題ないはずです。具体的には、キーでソートするにはsorted(results.items(), key=lambda x:x[0])が必要です。

最終的にdictを取得したい場合は、おそらくOrderedDictを使用できます。

OrderedDict(sorted(results.items(), key=lambda x:x[0]))を実行すると、並べ替えられたdictが返されます。

+0

key = lambda x:x [0]を追加する例を含めてsorted()を使用すると、リストの{%for%}イテレータの{%empty%}タグにヒットしました。私がソートしていない()場合、リストは正しく表示されますが、ソートされません。元の投稿のコードスニペットにテンプレートの適切なセクションを追加できるかどうかを確認します。 –

+0

私はちょうどDjango 1.10のドキュメントを読んで、1.10でsorted()が "リストのリスト"を処理する機能を追加しました。これはおそらく私が抱えている問題に関連していますか?私はDjango 1.6です... –

関連する問題