我的for循环没有得到值

问题描述:

这是我有:我的for循环没有得到值

result = defaultdict(<type 'list'>, 
{'USA': [{'username': 'user123', 'first-name': 'John', 'last-name': 'Doe'}], 
'Europe': [{'username': 'myname654', 'first-name': 'Peter', 'last-name': 'Johnson'}] 
}) 

这是我想

<html> 
    <body> 
    <h1> USA </h1> 
    <p> user123, John Doe</p> 

    <h1> Europe </h1> 
    <p> myname654, Peter Johnson</p> 
    </body> 
</html> 

我已经尝试吨不同的for循环输出,但没有他们工作。

这是我有,但它不起作用。

{% for item in result %} 
<h1> {{ item }} </h1> 
<p> {{ result.item.username }} </p> 
{% endfor %} 
+0

你能告诉我们你要使用你的for循环的代码? – GWW 2011-01-19 20:27:29

您正在使用print在for循环中获取输出。这首先将对象转换为一个字符串。显然,这种情况下的对象是某种xml/html对象。

从Django模板中,您不打印。您可以尝试通过str()调用将对象转换为字符串,但通常情况下,我有这样的感觉,即您正尝试使模板执行一些您不应该首先创建模板的操作。

尝试在模型对象上有一个返回所需字符串的方法,然后将其插入到模板中。

我觉得行:

<p> {{ result.item.username }} </p> 

应该是:

<p> {{ result.item.0.username }} </p> 

结果是一本字典。使用for x in mydict对字典进行迭代只是给出了键,而不是值。所以你需要做{% for item, value in mydict.items %}

其次,{{ result.item.username }}根本没有意义。 itemresult字典中的一个键的值,但是您不能在Django模板中进行这种间接查找。但是,幸运的是,我们有value变量中的值。第三,正如Kabie指出的那样,每个value实际上都是一个单元素列表。因此,您需要访问该列表中的第一个项目,然后才能访问该项目中的第一个项目。

全部放在一起:

{% for item, value in result.items %} 
<h1> {{ item }} </h1> 
<p> {{ value.0.username }} </p> 
{% endfor %}