2017-06-21 202 views
0

私は、ユーザーが異なるゲームに賭けることができるベットアプリを構築しています。私のような以下の一つとして表に別のゲームに対するユーザーの賭けを表示したい:Djangoテンプレートの2次元配列にアクセスする

game # | user 1 | user 2 | user 3 

game 1 | XXXX | XXXX | XXXX 

game 2 | XXXX | XXXX | XXXX 

game 3 | XXXX | XXXX | XXXX 

...

ここに私の見解は

users = User.objects.all() 
games = Game.objects.all() 
bets = Bet.objects.all() 

user_bets = [[] for i in range(len(games))] 

for i, game in enumerate(games): 
    game_bets = bets.filter(game=game) 
    for usr in users: 
     user_bet = game_bets.filter(user=usr)[0] 
     user_bets[i].append(user_bet) 

data = {'games', games, 'users', users, 'user_bets': user_bets} 
return render(request, 'bets.html', data) 

だが、私は方法がわかりません2d配列user_betsを使用してテーブルを埋める。助言がありますか?または、私がDjangoのテンプレートにそのようなデータを渡すためのベストプラクティスを間違えているのであれば?

乾杯

+0

でこれを行う簡単な方法は、カスタムフィルタである容易にするために、あなたのviews.pyに

@register.filter def index(List, i): return List[int(i)] @register.filter def entry_num_array(List): return range(len(List)) 

を生きることができる2つのテンプレートフィルタを定義://stackoverflow.com/a/10700142)。 – Jedi

答えて

0

djangoで多次元配列をテンプレートに渡すことは簡単ではありません。あなたはその後、したい、私はしばらくの間、この問題に取り組んできたので、私はあなたの質問が古いですけど、Djangoの社会の向上のために、ここで私は最終的に出て働いてきたものだ...

users = User.objects.all() 
games = Game.objects.all() 
bets = Bet.objects.all() 

user_bets=[] 
game_title=[] 

for i, game in enumerate(games): 
    game_titles = [game.title] 
    game_bets = bets.filter(game=game) 
    for usr in users: 
     user_bet = game_bets.filter(user=usr)[0] 
     user_bets[i][usr.id]=user_bet 
data = {'game_titles', game_titles 'users', users, 'user_bets': user_bets} 
return render(request, 'bets.html', data) 

HTTPS([ここに示されている]のように、あなたのテンプレート

{% for bet in user_bets %} 
{{ game_titles|index:forloop.counter0}}: 
    {% for counter in entry|entry_num_array %} 
     {{entry|index:counter}}| 
    {% endfor %} 
    <br>     
{% endfor %}