3

テンプレートにフラッシュ メッセージを追加するために使用messagesしています (ご想像のとおり)。

問題は、メッセージを生成するページへのリンクをダブルクリックすると、メッセージが 2 回表示されることです。

メッセージを使用して、ユーザーが期待していた場所からリダイレクトしたことをユーザーに伝えています。同じメッセージを 2 回必要としません。

ここのロジックは理解していますが、重複したメッセージを削除する方法を知りたいです。

  • URLをクリック
  • メッセージが生成され、ストレージに保存されました
  • ページがレンダリングされる前にURL をもう一度クリックする
  • 2 番目のメッセージが生成され、ストレージに保存されます
  • 応答はストレージからすべてのメッセージを追加します
  • 2 つのメッセージでレンダリングします

middleware最終的には、これですべてのリクエストをカバーできるようにしたいと考えています。

4

6 に答える 6

6

ミドルウェアでも同じ問題がありましたが、使用していた情報呼び出しの周りに小さなラッパーを好みました。

from django.contrib.messages import info
from django.contrib.messages import get_messages


def info_once_only(request, msg):
    """
    Just add the message once
    :param request:
    :param msg:
    :return:
    """
    if msg not in [m.message for m in get_messages(request)]:
        info(request, msg)


class PaymentsMiddleware(object):

    @staticmethod
    def process_request(request):
        """
        Put up a message letting a new user know that they are being dealt with.
        :param request:
        :return:
        """
        if hasattr(request, 'user'):
            user_profile = request.user.get_profile()
            if user_profile and user_profile.is_suspended:
                info_once_only(
                    request,
                    "Hi {username}, your account has been suspended, we'll be in touch shortly.".format(                           
                        username=request.user.username))
    return None
于 2014-12-12T00:35:49.333 に答える