【发布时间】:2017-01-26 14:38:47
【问题描述】:
我正在 Django 中尝试 BeautifulSoup4,并用它解析了一个 XML 页面。当我尝试以不同的方式在 python 解释器中解析相同的 XML 页面时,它工作正常。但是在 Django 中,我得到一个如下所示的页面。
views.py:
def rssfeed(request):
list1=[]
xmllink="https://rss.sciencedaily.com/computers_math/computer_programming.xml"
soup=BeautifulSoup(urlopen(xmllink),'xml')
for items in soup.find_all('item'):
list1.append(items.title)
context={
"list1":list1
}
return render(request,'poll/rssfeed.html',context)
rssfeed.html:
{% if list1 %}
<ul>
{% for item in list1 %}
<li>{{ item }}</li>
{% endfor %}
</ul>
{% endif %}
我做错了什么?
【问题讨论】:
-
我会在那里放一些打印语句或
import pdb; pdb.set_trace()行,以弹出交互式解释器,看看发生了什么。另外,我认为{% if list1 %}是不必要的,因为如果列表为空,for 循环将不会创建任何模板代码。 -
谢谢。我刚开始学习时不知道。但是参考第二点,我想我可能会在后面写一个 else 语句并打印一些东西。
-
那么当您在
list1.append(items.title)之前添加print(items.title)或在return语句之前添加print(list1)时,您会在终端窗口中看到什么?运行您的代码,我得到了一个包含在<title>标签中的标题列表,我认为这是您所期望的。但是,对您而言,每个{{ item }}似乎都是一个空列表[],这很奇怪...我刚刚注意到您在问题中也提到了它在Python 解释器中对您有用,即我在哪里测试过。 -
另外,您可以尝试从 Django 项目中删除任何已编译的
.pyc文件,看看您是否只是看到旧代码的影响。 -
print(list1)打印终端中的所有标题。但是{{ item }}仍然返回一个空列表
标签: python django beautifulsoup render