我刚刚开始学习Flask,我正尝试在新闻标题网站上使用简单的搜索表单,但是当我提交搜索似乎不起作用时,我使用的是简单的flask get请求 这是我的代码:
main.cpp online 2:7: error: expected nested-name-specifier before ‘namespace’
using namespace std;
^~~~~~~~~
和我的html代码:
import feedparser
from flask import Flask
from flask import render_template
from flask import request
app = Flask(__name__)
rss_feed = {'wsj': "https://feeds.a.dj.com/rss/RSSWSJD.xml",
'cnbc': "https://www.cnbc.com/id/100003114/device/rss/rss.html",
'washington_post': "http://feeds.washingtonpost.com/rss/politics?itid=lk_inline_manual_2"}
@app.route("/")
def get_news():
query = request.args.get('publication')
if not query or query.lower not in rss_feed:
publication = 'wsj'
else:
publication = query.lower
feed = feedparser.parse(rss_feed[publication])
return render_template("home.html", articles=feed['entries'])
if __name__ == "__main__":
app.run(port=5000, debug=True)
现在,当我提交搜索“ cnbc”时,它仍然显示“ wsj”的结果,我的代码有什么问题?
答案 0 :(得分:1)
我在代码中添加了4个不同的注释作为注释,请在词汇表中查看。 解决方法如下:
Python文件,这是发生错误的地方,如果您的if语句总是返回True,则要花很多时间,因此发布变量设置为'wsj
import feedparser
from flask import render_template, request, Flask
# Note 1
app = Flask(__name__)
rss_feed = {'wsj': "https://feeds.a.dj.com/rss/RSSWSJD.xml",
'cnbc': "https://www.cnbc.com/id/100003114/device/rss/rss.html",
'washington_post': "http://feeds.washingtonpost.com/rss/politics?itid=lk_inline_manual_2"}
@app.route("/")
def get_news():
if request.args.get('publication'):
query = request.args.get('publication').lower() # Note 2
print(f'Query is : {query}') # Note 4
if not query or query not in rss_feed: # Note 3
print('Publication is wsj') # Note 4
publication = 'wsj'
else:
print('Publication is the query entry') # Note 4
publication = query
feed = feedparser.parse(rss_feed[publication])
return render_template("view.html", articles=feed['entries'])
return render_template("view.html")
if __name__ == "__main__":
app.run(port=5000, debug=True)
HTML文件
<html>
<head>
<title>Headlines</title>
</head>
<body>
<h1>Headlines</h1>
<!-- Note 5 -->
<form method="GET">
<input type="text" name="publication" placeholder="search">
<input type="submit" value="Submit">
</form>
{% for article in articles %}
<b><a href="{{article.link}}">{{article.title}}</a></b><br />
<i>{{ article.published }}</i><br />
<p>{{ article.summary }}</p>
<hr />
{% endfor %}
</body>
</html>
注释
注意1:在同一行中从同一包中导入数据
注2:宁愿检查查询是否较低,最好像我一样将其降低到变量中。
注3:这是真正的问题所在。该语句始终为True,因此将“ publication”变量设置为“ wsj”。这是因为rss_feed中没有添加'query.lower',但事实并非如此。顺便说一句,你应该做到这一点'query.lower()'
注4:仅提醒您如何查找和查找代码。print()函数是在python中学习的第一件事,也是解决此问题的最有用的工具。这是我在不到5分钟的时间内发现错误的方法,因为我让代码“说”通过了终端。
注5:此处没有什么建议,仅出于可读性考虑,首先添加一个method ='GET'(不必要)。然后最好将HTML文件缩进,因为它们都乱成一团。
另一个可能更清晰的解决方案是:
@app.route("/")
def get_news():
if request.args.get('publication'):
query = request.args.get('publication').lower()
if not query or query not in rss_feed:
publication = 'wsj'
feed = feedparser.parse(rss_feed[publication])
return render_template("view.html", articles=feed['entries'])
publication = query
feed = feedparser.parse(rss_feed[publication])
return render_template("view.html", articles=feed['entries'])
return render_template("view.html")