Django视图未传递完整数组至模板:仅显示单条数据问题咨询
Django模板仅显示单条XML数据的问题解决
问题描述
我是Django新手,已完成XML文件解析,终端打印时能看到XML中的全部约15条标题与链接,但在模板中仅能显示单条标题和链接。不清楚为何数组arr与print输出结果不同,请问我哪里出错了?
相关代码
views.py
def madxmlparser(request): url = 'https://www.example.com/rss/current.xml' tree = ET.parse(urlopen(url)) root = tree.getroot() for entry in root.findall('{http://www.w3.org/2005/Atom}entry'): title = entry.find('{http://www.w3.org/2005/Atom}title').text link = entry.find('{http://www.w3.org/2005/Atom}link').attrib['href'] arr = [title, link] print(title, link) return render(request, 'madxmlparser.html', {'arr':arr})
模板文件(madxmlparser.html)
{% for i in arr %} <div class="row"> {{ i }} </div> {% endfor %}
问题原因与解决方法
错误原因
你在for循环里每次都重新给arr赋值为[title, link],循环每执行一次,arr就会被当前条目的标题和链接覆盖。循环结束后,arr只保留最后一条数据的两个字段,所以模板只能遍历这两个值,呈现单条内容的片段。
修正方案
- 初始化列表并批量存储数据:先创建空列表,在循环里把每条数据以字典形式追加进去,保存所有条目。
- 调整模板遍历逻辑:遍历整个条目列表,逐个取出每条数据的标题和链接。
修正后的views.py代码:
def madxmlparser(request): url = 'https://www.example.com/rss/current.xml' tree = ET.parse(urlopen(url)) root = tree.getroot() # 初始化空列表存储所有条目 entries = [] for entry in root.findall('{http://www.w3.org/2005/Atom}entry'): title = entry.find('{http://www.w3.org/2005/Atom}title').text link = entry.find('{http://www.w3.org/2005/Atom}link').attrib['href'] # 追加单条完整数据 entries.append({'title': title, 'link': link}) print(title, link) return render(request, 'madxmlparser.html', {'entries': entries})
修正后的模板代码:
{% for item in entries %} <div class="row"> <a href="{{ item.link }}">{{ item.title }}</a> </div> {% endfor %}
修改后模板就能遍历所有15条数据,每条都显示对应的标题和链接。
内容的提问来源于stack exchange,提问作者metalboxhead
相关产品推荐
相关产品推荐

