试图理解Django在视图和模板之间的沟通

时间:2017-12-20 11:14:01

标签: python django django-templates django-views

(编辑)的 我来自web2py背景,发现Django是一个比web2py更复杂的学习和使用框架。

在第一个答案之后,我已经调整了我的问题描述。

在我看来,我有:

def team(request):
hr = dict(name="Some Name", photo="/static/images/HR.jpg", url="http://some.website.com/?page_id=3602")
js = dict(name="Some Name2", photo="/static/images/JS.jpg", url="http://some.website.com/?page_id=3608")
context = {team:[hr,js]}
return render(request, "wos_2017_2/team.html", context)

在模板中我有

<ul>
   {% for person in context.team %}
   <li> {{ person.name }} {{ person.photo }} {{ person.url }} </li>
   {% endfor %}
</ul>

绝对没有输出。

这适用于普通的python:

hr = dict(name="Some Name", photo="/static/images/HR.jpg", url="http://some.website.com/?page_id=3602")
js = dict(name="Some Name2", photo="/static/images/JS.jpg", url="http://some.website.com/?page_id=3608")
context = dict(team = [hr,js])
for i in context['team']:
    print(i['name'], i['photo'], i['url'])

带输出

Some Name /static/images/HR.jpg http://some.website.com/?page_id=3602
Some Name2 /static/images/JS.jpg http://some.website.com/?page_id=3608

为什么我没有在Django中获得任何结果?

3 个答案:

答案 0 :(得分:3)

你的第一个例子是正确的。可悲的是,你的第一行代码中有一个小错字:

hr = dict(name="Some Name, ...),

该行以逗号,结尾。现在hr变为tuple,只有一个元素:dict。如果没有逗号,则可以使用:

{{ team.0.name }}
{{ team.1.name }}

根据您更新的答案,您需要在模板中将context.team更改为team

{% for person in team %}

上下文字典已解包&#39;在模板中。

答案 1 :(得分:0)

我无法发表评论所以我不得不发表回答。

只能使用不可变数据类型作为键,即不能使用列表或词典如果使用可变数据类型作为键,则会收到错误消息。键可以正常使用。

我能说的是问题出在您的视图代码中:

context = {team:[hr,js]}

应该是这样的:

context = {"team":[hr,js]}

context = dict(team=[hr,js])

答案 2 :(得分:0)

<ul>
                    {% for person in team %}
                    <li> {{ person.name }} {{ person.photo }} {{ person.url }} </li>
                    {% endfor %}
 </ul>

是阅读模板中字典的正确方法。