在Django模板中访问二维数组 [英] Accessing a two dimensional array in Django template

查看:66
本文介绍了在Django模板中访问二维数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在构建一个投注应用程序,用户可以在该游戏上投注不同的游戏.我想在一张表格中显示用户对不同游戏的下注,如下所示:

I am building a betting app where users can bet on different games. I want to show users' bets for different games in a table such as one as below:

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中的模板的最佳做法是什么?

But I don't know how to fill in the table using the 2d array user_bets. Any suggestions? Or if I'm doing the whole thing wrong any best practice to pass such data to template in Django?

欢呼

推荐答案

在django中将多维数组传递给模板并不简单.我已经在这个问题上研究了一段时间,所以我知道您的问题很旧,但是为了改善Django社会,这是我终于解决的问题...

Passing Multi-dimensional arrays to templates in django is not straight forward. I've been working on this problem for a while, so I know your question is old, but for the betterment of django society, here's what I've finally worked out...

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)

然后,您想定义两个模板过滤器,为方便起见,它们可以存在于您的视图中.py

You then want to define two template filters, which for ease can live in your 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 %}

这篇关于在Django模板中访问二维数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆