试图了解Django在视图和模板之间的通信
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了试图了解Django在视图和模板之间的通信相关的知识,希望对你有一定的参考价值。
(编辑)我来自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中获得任何结果?
答案
你的第一个例子是正确的。可悲的是,你的第一行代码中有一个小错字:
hr = dict(name="Some Name, ...),
该行以逗号,
结尾。现在hr
成为一个单一元素的tuple
:dict。没有逗号这可行:
{{ team.0.name }}
{{ team.1.name }}
根据您的更新答案,您需要在模板中将context.team
更改为team
:
{% for person in team %}
上下文字典在模板中“解压缩”。
另一答案
我无法发表评论所以我不得不发表回答。
只有不可变数据类型可以用作键,即不能使用列表或字典如果使用可变数据类型作为键,则会收到错误消息。键可以正常使用。
我可以告诉你的问题是你的视图代码:
这个
context = {team:[hr,js]}
应该这样:
context = {"team":[hr,js]}
要么
context = dict(team=[hr,js])
另一答案
<ul>
{% for person in team %}
<li> {{ person.name }} {{ person.photo }} {{ person.url }} </li>
{% endfor %}
</ul>
是读取模板中字典的正确方法。
以上是关于试图了解Django在视图和模板之间的通信的主要内容,如果未能解决你的问题,请参考以下文章