Flash消息在Flask中不起作用

Wil*_*234 1 python flask

我无法使闪光灯功能在烧瓶中工作。这是我的代码。

#!venv/bin/python3
from flask import Flask, flash

app = Flask(__name__)
app.config['SECRET_KEY'] = '12345'

@app.route('/')
def index():
    flash('Hi')
    return 'Hello'

if __name__ == '__main__':
    app.run()
Run Code Online (Sandbox Code Playgroud)

我希望这会闪烁一条消息,提示您好,但是当我加载页面时,不会出现闪烁框。我在这里不明白什么?

Pep*_*tch 5

我认为主要问题是您返回的是字符串,而不是处理Flash并将其转换为显示消息的render_template。在此处查看此文档代码,以获取有关如何处理闪光灯的示例

所以我建议尝试: return render_template('index.html')

然后使用index.html文件设置处理Flash消息的代码。我有一种感觉,就像您在此处所做的那样,仅返回一个字符串,而没有任何地方可以让代码理解闪存,则将返回空结果。


Iva*_*ruk 5

问这个问题已经有一段时间了。我会在这里发布我的答案,因为我以某种方式遇到了这个问题。

正如 Miguel Grinberg 在“Flask Web 开发:使用 Python 开发 Web 应用程序”中所写:

呼叫flash()不足以显示消息;应用程序使用的模板需要呈现这些消息。

因此,任何遇到相同问题的人,只要确保您将该get_flashed_messages()功能添加到模板中,然后显示一条消息即可。对于参考,您可以查看:

Python Flask flash 无法正常工作

当然还有上面提到的 Miguel Grinberg 的书,第 4 章。

希望这会有所帮助。


小智 5

    #!venv/bin/python3
    from flask import Flask, flash, redirect
    
    app = Flask(__name__)
    app.config['SECRET_KEY'] = '12345'
    
    @app.route('/')
    def index():
        flash('Hi')
        return redirect('index.html')
    return render_template('index.html')
    
    if __name__ == '__main__':
        app.run()
Run Code Online (Sandbox Code Playgroud)

您可以在代码导入重定向中进行以下更改并将其重定向到任何 html 页面以显示闪烁的消息。我们使用 get_flashed_messages() 的页面

在 index.html 文件中添加以下代码

 <body>
      {% for mesg in get_flashed_messages() %}
      <h1>{{ mesg }}</h1>
      {% endfor %}
    </body>
Run Code Online (Sandbox Code Playgroud)