1

モジュールを使用django.contrib.messagesしてフラッシュメッセージを作成します。これらのメッセージは、追加のタグに応じて、ページのさまざまなブロックに表示できます。

messages.error(request, 'Error message', extra_tags='form')

'global'という名前のデフォルトのタグがあり、extra_tagsが設定されていない場合は、新しいメッセージに追加する必要があります。django.contrib.messages.add_message()そこで、アプリケーションの起動時にメソッドをラップするミドルウェアを作成しました。

class Initialization:
    def __init__(self):
        self.init_messages()
        raise MiddlewareNotUsed

    def init_messages(self):
        add_message_method = messages.add_message
        def add_message_wrapper(request, level, message, extra_tags='', fail_silently=False):
            if not extra_tags:
                extra_tags = 'global'
            add_message_method(request, level, message, extra_tags, fail_silently)
        messages.add_message = add_message_wrapper

メソッドが呼び出されているのがわかりますinit_messages()が、を呼び出すとdjango.contrib.messages.add_message()、でラップされていませんadd_message_wrapper()

私の失敗はどこにありますか?

4

1 に答える 1

1

代わりに「スタートアップコード」を追加しsettings.pyたり、追加したりすることはできませんviews.pyか?

"global"空の場合は常にデフォルト値を追加するだけの場合はextra_tags、メッセージのレンダリング中にページテンプレート内で追加することもできます。

{% if not message_obj.tags %}
    // Use "global"
{% else %}
    // Use {{message_obj.tags}}
{% endif %}

これは、ビューコード内でも実行できます。

storage = messages.get_messages(request)
for message in storage:
    if not message.tags:
        message.tags = "global"
storage.used = False

詳細については、Djangoのドキュメントを参照してくださいhttps://docs.djangoproject.com/en/dev/ref/contrib/messages/#expiration-of-messages

于 2012-04-13T09:17:37.697 に答える