在Django模板中访问二维数组

时间:2017-06-21 19:17:03

标签: python 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)

但我不知道如何使用2d数组user_bets填写表格。有什么建议?或者,如果我在将这些数据传递给Django中的模板的任何最佳实践中做错了吗?

干杯

2 个答案:

答案 0 :(得分:1)

将多维数组传递给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 %}

答案 1 :(得分:1)

对于正在寻求访问标准2D数组的用户,可以使用嵌套循环。 代码在下面

views.py

    content={'f':[[1,2,3,4],[4,5,6,7]]}
    return render(request,'index.html',content)

index.html

{% for array in f %}
{% for content in array %}
<h1>{{content}}</h1>
{% endfor %}
{% endfor %}
相关问题