我知道这个问题听起来很奇怪,但是请让我自己解释一下.
我正在使用装饰器使消息持续存在,直到用户真正解除它(就像堆栈溢出消息的行为).问题是,因此,在用户注销之前添加消息,因此在用户注销后立即显示消息.我想知道在注销视图中删除消息的最佳方法是什么.我想到了两种方法,我想知道是否有人能想到更好的方法.
我现在赞成这个:
storage = messages.get_messages(request)
storage.used = True
Run Code Online (Sandbox Code Playgroud)
在此:
storage = messages.get_messages(request)
del storage._loaded_messages[0]
Run Code Online (Sandbox Code Playgroud)
对我来说,第二种方式似乎更明确,即使它更丑陋:我的意图是删除当前加载的消息,这使得清楚.第一种方法采用一种方法,消息将被清除作为副作用......但至少它不依赖于dunder变量......你们怎么想?
我喜欢这种更简单的方法来清除底层迭代器,因为我实际上想要在标准Django消息的位置添加新消息.
list(messages.get_messages(request))
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我要将我使用的方法标记为"答案".感谢那些评论的人.
我跟着这个:
storage = messages.get_messages(request)
storage.used = True
Run Code Online (Sandbox Code Playgroud)
因为它看起来更干净,更容易测试,并且符合项目其余部分的一般做法.
我不得不使用上面提出的解决方案的2 toghether,因为没有人独显足够多的:
storage = messages.get_messages(request)
for _ in storage:
pass
if len(storage._loaded_messages) == 1:
del storage._loaded_messages[0]
Run Code Online (Sandbox Code Playgroud)
至于可以接受的解决方案,我可以多次遍历消息,发现消息似乎没有被“消耗”。
| 归档时间: |
|
| 查看次数: |
9394 次 |
| 最近记录: |