在 Django 模板中访问二维数组
Posted
技术标签:
【中文标题】在 Django 模板中访问二维数组【英文标题】:Accessing a two dimensional array in Django template 【发布时间】:2017-11-24 20:32:16 【问题描述】:我正在构建一个投注应用程序,用户可以在其中投注不同的游戏。我想在如下表中显示用户对不同游戏的投注:
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 中的模板?
干杯
【问题讨论】:
一个简单的方法是使用自定义过滤器shown here。 【参考方案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 %
【讨论】:
【参考方案2】:对于那些正在寻找访问标准二维数组的人,您可以使用嵌套循环。 代码如下
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 %
【讨论】:
以上是关于在 Django 模板中访问二维数组的主要内容,如果未能解决你的问题,请参考以下文章