2017-08-30 59 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

感謝您的更新。是的,我想其他答案沒有意義,因爲它沒有參考閃光燈。似乎沒有其他選擇,除了我一直在做的事情.... –