我正在建立一个投注应用程序,用户可以在不同的游戏上下注。我想向用户展示'在表格中为不同的游戏下注,如下所示:
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 :(得分: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 %}