如何访问Django模板中的数组元素?


166

我正在将数组arr传递给我的Django模板。我要访问的阵列中的阵列的各个元素(例如arr[0]arr[1])等等,而不是通过整个阵列循环。

有没有办法在Django模板中做到这一点?


3
你可以这样访问项目arr.0arr.1...另一种解决办法:写自己的模板标签arr|array_item: "0" 或这样的事情。
rphonika 2014年

1
@rphonika是的,这里的例子:stackoverflow.com/a/29664945/2714931
WeizhongTu

Answers:


303

请记住,Django模板中的点符号用于Python中的四种不同符号。在模板中,foo.bar可以表示以下任何一项:

foo[bar]       # dictionary lookup
foo.bar        # attribute lookup
foo.bar()      # method call
foo[bar]       # list-index lookup

它按此顺序尝试它们,直到找到匹配项。因此foo.3,您将获得列表索引,因为您的对象不是以3为键的dict,没有名为3的属性,也没有名为3的方法。


3
第一个和最后一个不是foo['bar']吗?
鲍勃·斯坦

2
似乎没有办法使用变量索引来访问列表项目:(
Vicky Chijwani

同意@VickyChijwani:上面的第四个选项无效。Django模板似乎不使用变量进行列表索引查找
ehacinom

@hiyume如何克服呢?
卡萨巴·托斯

我不明白在官方文档中找不到该内容。您能提供该帖子的来源吗?我也很惊讶当前如何不接受这个答案。
卡萨纳斯

148
arr.0
arr.1

等等


10
如何像前一样打印动态:arr.variablename
Nandha Kumar

没有魔术数字,有没有办法做到这一点?换句话说,要“命名” .0 .1 .2等...?如阵列[“名字”],阵列[“姓”]等。
cyberjoac

在这种情况下,@ cyberjoac使用字典。在视图中:d = {'first_name':'foo','last_name':'bar'}。在模板{{d.first_name}}中可以正常工作。
Ofri Raviv 2014年


7

当您render请求coctext一些信息时:例如:

return render(request, 'path to template',{'username' :username , 'email'.email})

您可以像这样在模板上访问它: for variabels :

{% if username %}{{ username }}{% endif %}

for array :

{% if username %}{{ username.1 }}{% endif %}
{% if username %}{{ username.2 }}{% endif %}

您还可以在其中命名数组对象views.py,十种用法如下:

{% if username %}{{ username.first }}{% endif %}

如果还有其他问题,我希望为您提供帮助

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.