如何使用Flask闪存链接闪烁消息?

kxx*_*ing 13 python openid flask flash-message

我正在使用Flask创建一个Web应用程序来处理GoogleOpenID,这些代码几乎已经完成,除了闪烁的消息包含一个链接:

@oid.after_login
def create_or_login(resp):
    user = db_session.query(User).filter_by(email=resp.email).first()
    if user is not None:
        flash('Successfully signed in', 'success')
    else:
        user = User(nickname=resp.fullname, source=GOOGLE, email=resp.email)
        db_session.add(user)
        db_session.commit()
        flash(flashing_message, 'success')
    g.user = user
    session['nickname'] = user.nickname
    return redirect(oid.get_next_url())
Run Code Online (Sandbox Code Playgroud)

当flashing_message是这样时,它运行良好: 'Successfully registered, please click here'

但是当flashing_message是'Successfully registered, please click <a href="/me" class="alert-link">here</a>',它不起作用(没有任何闪烁)而不会抛出任何错误.奇怪的是,flash()和return之间的句子也不起作用(没有设置session ['nickname]或g.user).

Pet*_*tts 28

此处的其他答案侧重于更改模板以允许将所有Flash消息标记为安全,这可能不是您想要的.

如果您只想将某些闪存消息标记为安全,请在Markup()中将传递给flash()的文本换行.(用于标记的Flask API文档)

例如,而不是:

flash('Successfully registered, please click <a href="/me" class="alert-link">here</a>')
Run Code Online (Sandbox Code Playgroud)

像Markup这样在Markup()中包装字符串:

flash(Markup('Successfully registered, please click <a href="/me" class="alert-link">here</a>'))
Run Code Online (Sandbox Code Playgroud)

与往常一样,您需要从烧瓶包中导入Markup,例如:

from flask import Markup
Run Code Online (Sandbox Code Playgroud)


Ble*_*der 2

转义 HTML 是默认行为,因此将其传递给safe过滤器以显示未转义的 HTML:

{{ message|safe }}
Run Code Online (Sandbox Code Playgroud)