python - 为什么 django 模板没有显示任何输出?
问题描述
因此,我在这里使用 django 编写了一个简单的新闻应用程序,但模板似乎无法正常工作,它没有显示任何从views.py
. 我检查了settings.py
,INSTALLED_APPS
设置它工作
views.py
from django.shortcuts import render,HttpResponse
import bs4
from bs4 import BeautifulSoup as soup
from urllib.request import urlopen
def get_news():
news_link = "https://news.google.com/news/rss"
page = urlopen(news_link)
xml_page = page.read()
page.close()
soup_page = soup(xml_page,"xml")
news_list = soup_page.findAll("item")
return news_list
def index(request):
news_list = get_news()
return render(request,'main/index.html',{'news_list' : news_list})
和模板
{% for news in news_list %}
<h3> {{ news.title.text }} </h3>
<h3> {{ news.pubDate.text }} </h3>
{% endfor %}
如果我从 render() 字典中传递任何其他数据,它正在工作,但是在传递列表时,它没有在模板中显示任何数据
我尝试检查列表是否为无或为空,但不,它不是空的。谢谢!
解决方案
你得到了类似的东西(__str__
bs4.element.Tag 实例):
<title>lorem ipsum, dolor...</title>, <link>https://news.google.com/__i/rss/rd/articles/CBMiaGh0dHBzOi8vd3d3LmNubi5jb20vMjAyMC8wMi8wNS9wb2xpdGljcy9kb25hbGQtdHJ1bXAtbmFuY3ktcGVsb3NpLXN0YXRlLW9mLXRoZS11bmlvbi1hbmFseXNpcy9pbmRleC5odG1s0gFsaHR0cHM6Ly9hbXAuY25uLmNvbS9jbm4vMjAyMC8wMi8wNS9wb2xpdGljcy9kb25hbGQtdHJ1bXAtbmFuY3ktcGVsb3NpLXN0YXRlLW9mLXRoZS11bmlvbi1hbmFseXNpcy9pbmRleC5odG1s?oc=5</link>, <guid isPermaLink="false">52780574934659</guid>, <pubDate>Wed, 05 Feb 2020 08:15:00 GMT</pubDate>, <description><ol><li><a href="https://news.google.com/__i/rss/rd/articles/CBMiaGh0dHBzOi8vd3d3LmNubi5jb20vMjAyMC8wMi8wNS9wb2xpdGljcy9kb25hbGQtdHJ1bXAtbmFuY3ktcGVsb3NpLXN0YXRlLW9mLXRoZS11bmlvbi1hbmFseXNpcy9pbmRleC5odG1s0gFsaHR0cHM6Ly9hbXAuY25uLmNvbS9jbm4vMjAyMC8wMi8wNS9wb2xpdGljcy9kb25hbGQtdHJ1bXAtbmFuY3ktcGVsb3NpLXN0YXRlLW9mLXRoZS11bmlvbi1hbmFseXNpcy9pbmRleC5odG1s?oc=5" target="_blank">Trump makes dazzling, divisive reelection pitch in State of the Union</a>&nbsp;&nbsp;<font color="#6f6f6f">CNN</font></li><li><a href="https://news.google.com/__i/rss/rd/articles/CBMiK2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9QlNnYzd3dWlOMzDSAQA?oc=5" target="_blank">Nancy Pelosi rips up Trump's State of the Union speech</a>&nbsp;&nbsp;<font color="#6f6f6f">CNN</font></li><li><a href="https://news.google.com/__i/rss/rd/articles/CBMiZWh0dHBzOi8vd3d3Lm5iY25ld3MuY29tL3RoaW5rL29waW5pb24vc3RhdGUtdW5pb24taXNuLXQtc3Ryb25nLXRydW1wLXByZXRlbmRzLWl0LXMtYmV0dGVyLW5jbmExMTI5OTIx0gEtaHR0cHM6Ly93d3cubmJjbmV3cy5jb20vdGhpbmsvYW1wL25jbmExMTI5OTIx?oc=5" target="_blank">The state of the union isn't as strong as Trump pretends, but it's better than Democrats say</a>&nbsp;&nbsp;<font color="#6f6f6f">NBC News</font></li><li><a href="https://news.google.com/__i/rss/rd/articles/CBMicWh0dHBzOi8vbnlwb3N0LmNvbS8yMDIwLzAyLzA1L3N0YXRlLW9mLXRoZS11bmlvbi1hZGRyZXNzLXRydW1wLWhpdHMtZ3JhbmQtc2xhbS13aGlsZS1wZWxvc2ktanVzdC1sb29rcy1sb29rcy1zYWQv0gF1aHR0cHM6Ly9ueXBvc3QuY29tLzIwMjAvMDIvMDUvc3RhdGUtb2YtdGhlLXVuaW9uLWFkZHJlc3MtdHJ1bXAtaGl0cy1ncmFuZC1zbGFtLXdoaWxlLXBlbG9zaS1qdXN0LWxvb2tzLWxvb2tzLXNhZC9hbXAv?oc=5" target="_blank">State of the Union address: Trump hits grand slam, while Pelosi just looks looks sad</a>&nbsp;&nbsp;<font color="#6f6f6f">New York Post </font></li><li><a href="https://news.google.com/__i/rss/rd/articles/CBMiZmh0dHBzOi8vd3d3LmZveG5ld3MuY29tL29waW5pb24vbGVzbGllLW1hcnNoYWxsLXNvdHUtYWRkcmVzcy1jb250aW51ZXMtdHJ1bXBzLXJvbGUtYXMtZGl2aWRlci1pbi1jaGllZtIBamh0dHBzOi8vd3d3LmZveG5ld3MuY29tL29waW5pb24vbGVzbGllLW1hcnNoYWxsLXNvdHUtYWRkcmVzcy1jb250aW51ZXMtdHJ1bXBzLXJvbGUtYXMtZGl2aWRlci1pbi1jaGllZi5hbXA?oc=5" target="_blank">Leslie Marshall: SOTU address continues Trump’s role as divider in chief</a>&nbsp;&nbsp;<font color="#6f6f6f">Fox News</font></li><li><strong><a href="https://news.google.com/stories/CAAqOQgKIjNDQklTSURvSmMzUnZjbmt0TXpZd1NoTUtFUWlEamE3N2pvQU1FU1YxUEo2emxrYWRLQUFQAQ?oc=5" target="_blank">View full coverage on Google News</a></strong></li></ol></description>, <source url="https://www.cnn.com">CNN</source>
存储在news
.
您无法使用 访问此实例{{ news.title.text }}
。这就是您最终在模板中得到空结果的原因。试试 {{ news }} 你会看到里面有什么。
您可以创建一个自定义模板过滤器,它可以从该实例中提取必要的数据 --> https://docs.djangoproject.com/en/3.0/howto/custom-template-tags/
或者您将get_news
方法中的数据准备成 python 结构list of dicts
工作示例:
def get_news():
news_link = "https://news.google.com/news/rss"
page = urlopen(news_link)
xml_page = page.read()
page.close()
soup_page = soup(xml_page, "xml")
news_list = map(
lambda item: {'title': item.title.text, 'date': item.pubDate.text},
soup_page.findAll("item"))
return news_list
在模板中:
{% for news in news_list %}
<h3> {{ news.title }} </h3>
<h3> {{ news.date }} </h3>
{% endfor %}
推荐阅读
- javascript - 如何使用javascript解析graphql字段参数
- excel - 从公式结果生成超链接
- javascript - 在网格上移动js
- css - MathJax 方程的默认颜色
- android - 在 AndroidViewModel 中使用哪个上下文适合从 strings.xml 获取字符串值
- django - Django admin - 基于相关父模型的属性选项
- sql - 为什么在 where 子句中的字段周围添加括号会加快我的 SQL 查询速度?
- javascript - 我想将所有 div html 2 json 转换为 html
- javascript - 如何以正确的方式使用 angularfire 从 Firestore 获取和观察用户?
- python - 仅使用一个 for 循环或嵌套 for 循环打印嵌套字典