python - request.session.flash() 和 .pop_flash()

标签 python pyramid

每当我发布表单时,都会显示错误消息。但是,根据我将闪存添加到队列的方式,有些消息在我发布到表单后会保留,而有些则不会。我注意到这是由于我向队列添加消息的方式造成的。

完美运行的常规方式:

post_data = request.POST
if 'submit' in post_data:
    ... function(post_data) ...
    if ...:
        request.session.flash(u'This is some error message')
    request.session.flash(u'Maybe some other error message')

在 mako 文件中:

<html>...<body>...
% for m in request.session.pop_flash():
  <div class="alert-message">
    <p>${m}</p>
  </div>
% endfor
...</body></html>

但是,我希望某些消息的工作方式是:

if 'submit' in post_data: 
    messages = function(...) # output is always a list
    for m in messages:
        request.session.flash(m)

当我这样做时,每次我重新发布到同一个表单时,所有以前的消息都会再次添加到 .flash() 中。因此,错误消息不断堆积。我该如何解决这个问题或解决这个问题?

最佳答案

我找到了问题所在,但不知道为什么会发生。之前,我将 message 作为关键字发起:

@classmethod
def validate(cls, message=[], **kwargs):
    if this:
        message.append(u'...')
    return kwargs, message

我相信在每次发布后,消息都没有清除,即使我从未使用它调用validate()。但是,当我删除 messsage 作为关键字时,它工作正常:

@classmethod
def validate(cls, **kwargs):
    message = []
    ...

有谁知道为什么会这样吗?

关于python - request.session.flash() 和 .pop_flash(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8723340/

相关文章:

python - 使用 APScheduler 时,IIS 后面的 Pyramid (女服务员)随机停止工作

python - openid token 应该在 Pyramid 应用程序中何时/何地进行验证?

python - Pyramid-Python 中页面中特定元素的权限

python - 无法在具有特定 IP 和端口的 Linux 机器上使用 Python 获取原始 UDP 套接字

python - 如何在 Spacy 中训练具有不同波束目标参数的 NER 模型?

python - 使用 Python 上的网络爬虫打印文章

python - 控制 Scikit Learn 中逻辑回归的阈值

python - 在 Matplotlib 中绘制多个直方图 - 颜色或并排条

pyramid - 如何获取 Pyramid 中的ini数据?

python - 使用 CLI 脚本共享 Pyramid 配置