没有得到搜索结果

时间:2020-08-11 11:25:23

标签: python python-3.x flask

我刚刚开始学习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”的结果,我的代码有什么问题?

1 个答案:

答案 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")