Djangoで追加したメッセージのクリアについて

CookieBaseのThe messages frameworkを使っていると、追加した(add_message)メッセージを削除したいケースに遭遇することがあると思います。例えば、予期せぬエラーが発生したケースです。この場合にクッキーからメッセージを削除しないと、エラー後に初めてメッセージを表示するページに遷移した際に、エラー前に追加したメッセージが表示されてしまいます。

このようなケースを避けるために、一度追加したメッセージを削除する方法を調べたのでメモしておきます。といっても関数やメソッド類を見つけた訳ではなく、あくまで削除できる方法をみつけただけです。もし、削除用のメソッドや関数を発見したら、そちらを使う方が好ましいと思います。

その削除方法は以下の通りでです。

例) 追加したメッセージを削除する

for m in messages.get_messages(request):
    pass

以上2行で削除することができます。(※ 以下のように1行で書くことも可能です。

[m for m in messages.get_messages(request)]

for文でループすると「"django.contrib.messages.storage.base.BaseStrage"」の「iter(self)」から追っていくと、自身の「_get(self, *args, **kwargs)」をコールしています。で、実際のインスタンスのクラスは「"django.contrib.messages.storage.cookie.CookieStorage"」なので、このクラスでオーバーライドした「_get(self, *args **kwargs)」をコールします。そしてこのメソッドの中で、メッセージをpopしています。これが、メッセージが削除される理由です。

この記事が役に立った場合、シェアしていただけると励みになります!!