2012-11-22 24 views
4

所以,我学习Django的书,和Django文档,我无法理解这样的例子:蟒蛇/ Django的for循环和属性列表

<ul> 
{% for athlete in athlete_list %} 
    <li>{{ athlete.name }}</li> 
{% endfor %} 
</ul> 

这是关于模板,我不如何编码上下文。我如何从列表中获取名为“name”的属性?如果我创建一个字典,将不可能像本例中那样使用for循环。我已经编写它像这样,但它不工作:

athlete_list = {'name' = ['Athlete1', 'Athlete2', 'Athlete3']} 
Context({'athlete_list':athlete_list}) 

如果我athlete_list变量更改为正常的列表(没有字典)在模板中的“athlete.name”不会太工作。我不认为这是一本书中的错误,它可能很容易解决,但我无法得到它。

回答

5

我怀疑athlete_list是一个包含Athlete模型的QuerySet对象...(是否在任何地方提及?)。然后车型将有.name.age.sport或任何...

更新 - 只是看着http://www.djangobook.com/en/2.0/chapter04.html - 这其实并不似乎是最好的例子....

为了保持在现有模板中,你可以返回一个上下文类型的字典列表,例如:

[ {'name': 'bob'}, {'name': 'jim'}, {'name': 'joe'} ] 
+0

谢谢你的回答,当然它现在正在工作。他们在任何地方都没有提到如何编码上下文,现在我可以看到它并不是最好的例子:) – Chris

2

你athlete_list实际上是模板的字典

<ul> 
{% for athlete_name in athlete_list.name %} 
    <li>{{ athlete_name }}</li> 
{% endfor %} 
</ul> 

您可以通过.,而不是通过[]

所以在你的模板访问字典键{{ athleate_list.name }}

将字符串# ['Athlete1', 'Athlete2', 'Athlete3']列表

+0

这当然也在起作用,但我想要像在书中一样使用模板。无论如何感谢 – Chris

3

如果你想保留的模板,你应该低于返回。

athlete_list = ({'name':'Athlete1'},{'name':'Athlete2'},{'name':'Athlete3'}) 

Context({'athlete_list':athlete_list})