2017-08-30 61 views
0

金字塔的session.pop_flash()返回一个列表,其中包含所有已添加到Flash队列的元素(不确定是否存在实际限制,但我没有看到过)。我相信这是直接基于PHP的Flash队列。金字塔 - 修改会话flash

如何直接修改Flash队列?举个例子,举个例子,它里面有3个元素,我想删除其中的一个(并确切知道哪一个)?

目前我正在做这种方式: -

q = request.session.pop_flash() 
q.pop(index_that_I_want_removed) 
for element in q: 
    request.session.flash(q) 

很简单,但似乎的hackish。有没有更优雅的解决方案?

回答

0

flash消息被设计为不透明队列。这意味着先进先出。如果知道正在使用的特定队列的实现细节,则只能直接修改其中的消息。例如,在Pyramid的SignedCookieSessionFactory中,队列被存储在会话中的特定键中,您可以覆盖它。然而,没有可用于任意ISession实现的通用解决方案。

更新

好吧......我想我需要的文档审查后撤销我的答案。如果你想忽略一个特定的Flash消息,那么你需要按照你已经做的方式来做。 @ oluwafemi-sule的答案并不准确,因为它专注于会话密钥/值而不是会话中存储的闪存队列。 pop_flash返回一个列表,您可以根据需要进行迭代。

+0

虽然这似乎与@ oluwafemi-sule的答案相矛盾。如果我可以(例如)有一个request.session.pop_one_flash()或类似的概念函数,FIFO就没有问题。 –

+0

我会更新我的答案 - 这是不正确的 - 我不应该从这里回忆。 –

+0

感谢您的更新。是的,我想其他答案没有意义,因为它没有参考闪光灯。似乎没有其他选择,除了我一直在做的事情.... –