在 Flask 中使用 peewee 查询 MySQL 后无法从列表中删除 objects

Can't remove objects from list after MySQL query with peewee in Flask

我的网站主页上有几个 links,links 到我列出一些团队新闻的子页面(标题列表和 links)。

当用户点击 /Nba-Teams/Lakers he/she 时会在第一时间被转发到一个一切正常的新视图(我列出了有关湖人队的相关新闻),但是当用户回到主页点击/Nba-Teams/Spurs link 也可以,但是在我看来的列表总是会包含之前的内容。

就像每次调用查询时,以前的结果都不会从 teamNews 列表中消失。我是 Python 的新手,所以如果有人能告诉我我做错了什么,我将不胜感激。

我假设当我加载新页面时 teamNews 不会被清空,但不幸的是我无法确定。如您所见,我试图在将数据传递给 html 后立即删除它的内容,但没有任何反应。

由于 html 使用了 nbaTeamNews 变量的内容,我不确定这是否是 HTML 格式问题。

teamNews = []

def getTeamNews (team_to_query):

    for obj in teams.select().where(teams.Nba == team_to_query):
        teamNews.append(obj)
    return teamNews    

@app.route('/Nba-Teams/<team>')
def team_page(team):

    return render_template("teams.html", nbaTeamNews=getTeamNews(team))
    del teamNews

html:

{% block body %}
<ul class=entries>
  {% for entry in nbaTeamNews %}
    <li><h2><a href="{{ entry.slug }}">{{ entry.newsTitle }}</a></h2>
  {% else %}
    <li><em>Unbelievable.  No entries here so far</em>
  {% endfor %}
  </ul>
{% endblock %}

不,您无法访问 del teamNews 行,因为您已经 return 响应,因此之前的结果仍然存在。

相反,您可以这样做:

# No teamNews here.

def getTeamNews(team_to_query):
    # Since you don't do any other things, directly assign it is enough, right?
    # No need for a list comprehension or a for loop here.
    teamNews = teams.select().where(teams.Nba == team_to_query)
    return teamNews