2015-08-31 156 views
1

我已阅读关于循环变量的所有模板标签帖子。显然Django不支持循环变量的关键,我不知道如何使用自定义模板标记。Django模板标签循环变量字典变量

我想显示这样的东西,但我怎么能达到这与{%为我在mData%}循环?

{{ mData.0.name }} 
{{ mData.1.name }} 
{{ mData.2.name }} 

{{ mData.0.age }} 
{{ mData.1.age }} 
{{ mData.2.age }} 

mData是词典的列表。

MDATA = { “名”: “亚历克斯”, “年龄”: “12”},{ “名”: “艾米”, “年龄”: “14”} ...

+1

关键是什么?在这案件?因为它看起来像'mData'是一个字典列表。 – dhke

+0

是的,这是一个字典清单...任何想法我怎么能通过这个循环?我尝试了{%for循环在mData.forloop.counter.name%}但它不起作用... – Arbitel

+0

在这种情况下,重新排序视图中的数据结构,以便传递给模板的字典是'{ 'age':[age0,age1,...],'name':[name0,name1,...]}'等等。否则,您正在将数据准备代码放入您的模板中。 – dhke

回答

2

考虑到你的数据在一个列表的字典,如:

my_data = [{"name" : "abc" , "age":20,...}, {} , {}...] 

您可以访问模板中每个字典的所有属性t他道:

{% for dict in my_data %} 
<!-- Here dict would be each of the dictionary in my_data --> 
<!-- You can access elements of dict using dot syntax, dict.property --> 
    {{ dict.name }}, {{ dict.age }}, ... {{ dict.property }} 
{% endfor %} 

参考链接:Django templating language

如果你想构建你的元素的顺序,你specifed,你可以做这样的事情:

Name List: 
{% for dict in my_data %} 
my_data.name 
{% endfor %} 

Age List: 
{% for dict in my_data %} 
my_data.age 
{% endfor %} 

... 
Prpoerty List: 
{% for dict in my_data %} 
my_data.property 
{% endfor %} 
+0

谢谢!这实际上按预期工作!简直不敢相信这个解决方案!我正在玩自定义模板标签和阅读关于忍者等等即将放弃! – Arbitel

+1

只需通过django文档中的模板语言章节,它会很好地编写并解释大量示例。一旦你通过它们,你会得到它的一个窍门。 http://www.djangobook.com/zh/2.0/chapter04.html – aliasav

+0

谢谢!我实际上正在阅读它,但还不能完全弄清楚它,并与我在其上阅读的模板标签混淆。谢谢您的详细解答!最后一个问题,如果我想循环遍历所有的属性呢?我可以用列表,属性= ['名称','年龄',...]来做到这一点吗? {%for i in properties%} my_data.properties {%endfor%} – Arbitel

0
{% for k, v in mData.items %} 
    {{ k }} {{ v }} 

顺便说一下,PEP8建议我们将该变量命名为lower + _,但不是像javascript或其他语言的驼峰。

+0

嗯,这将无法正常工作,因为我需要访问字典列表... mData.0.items而不是mData。项目 – Arbitel

1

Django模板标签有意地非常轻便,因此您不要将太多代码放入模板本身。如果你需要做一些像数据库中其他条目一样复杂的事情,你应该在views.py而不是模板中设置它。

对于您所描述的情况下,所有你需要做的是循环遍历对象的列表:

{% for data in datas %} 
    {{ data.name }} 
{% endfor %} 
{% for data in datas %} 
    {{ data.age }} 
{% endfor %} 
+0

这是行不通的......我需要访问字典列表。例如。 mData.0.name .....我需要循环0到1000,然后名称,年龄,性别......等任何想法? – Arbitel

+1

通过views.py你可以设置过滤器。 mData.objects.all()[:1000]应该获取数据库中的前1000条目。 – TheGRS

1

这解决了这个问题对我来说

{% for d in mData %} 
{{ d.name }} {{ d.age }} 
{% endfor %} 
+0

谢谢!这实际上按预期工作!简直不敢相信这个解决方案!我正在玩自定义模板标签和阅读关于忍者等等即将放弃! – Arbitel

+1

如果这项工作,你可以标记答案为答案,并请upvote – a134man