Python 无法获取搜索结果

Python 无法获取搜索结果,python,python-3.x,flask,Python,Python 3.x,Flask,我刚开始学习Flask,我正试图在我的新闻标题网站上使用一个简单的搜索表单,但当我提交搜索时,它似乎不起作用,我正在使用一个简单的Flask get请求 这是我的密码: import feedparser from flask import Flask from flask import render_template from flask import request app = Flask(__name__) rss_feed = {'wsj': "https://feeds.a

我刚开始学习Flask,我正试图在我的新闻标题网站上使用一个简单的搜索表单,但当我提交搜索时,它似乎不起作用,我正在使用一个简单的Flask get请求 这是我的密码:

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)
和我的html代码:

<html>
    <head>
        <title>Headlines</title>
    </head>
    <body>
            <h1>Headlines</h1>
            <form>
          <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>

标题
标题
{文章%中的文章为%s}

{{article.published}}
{{article.summary}}


{%endfor%}

现在,当我提交对“cnbc”的搜索时,它仍然显示“wsj”的搜索结果。我的代码有什么问题?

我在代码中添加了4个不同的注释作为注释,请查看词汇表。 以下是解决方案:

Python文件,这里是错误发生的地方,long-stoyry-short-if语句总是返回True,因此发布变量被设置为“wsj”

HTML文件


请通过
javascript
ajax
-在调用服务器API后动态更改html。使用断点是理解和查找错误的更好方法。提供请求的URL以获取问题的完整详细信息。如果我正在搜索“cnbc”,请求的URL取决于搜索。例如,请求的URL将检查我的回答谢谢大家@FedericoBaù,但为什么返回view.html两次?第一次(返回render_模板(“view.html”))是呈现模板并显示HTML网页。正如您所看到的,这里没有articles=feed['entries']变量(否则会引发错误)。第二个变量是在If语句之后显示搜索结果。在本例中,因为您使用的是html表单,表单的结果在同一页面中,您希望留在同一页面中,只呈现新项目。但如果你把方向转到其他地方,这种方法会更明显。有这样使用的
返回重定向(url\u例如('example'))
。首先呈现模板,然后在IF语句之后(通常是因为表单),它会重定向,但因为你哪里都不去,所以看起来有点奇怪。
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>
    <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>
@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")