2017-06-21 39 views
0

我正在構建一個用戶可以在不同遊戲中投注的投注應用程序。我想告訴用戶的投注表中的不同的遊戲,如一個如下圖所示:訪問Django模板中的二維數組

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) 

但我不知道如何使用二維數組user_bets填寫表格。有什麼建議麼?或者,如果我在做所有事情都是錯誤的,那麼最好的做法是將這些數據傳遞給Django中的模板?

乾杯

+0

一個簡單的方法來做到這一點是因爲[如下所示]自定義過濾器(HTTPS ://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) 

然後你想定義兩個模板過濾器,這對於緩解可以住在你的views.py

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

@register.filter 
def entry_num_array(List): 
    return range(len(List)) 

然後在你的模板

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