2010-12-06 4 views
0
messages.success(request, "Success. Your settings have been saved.") 

オクラホマので、今、私のテンプレートで、私はこれを実行します。Djangoでは、ループせずに(メッセージフレームワークを使用して)メッセージをどのように表示するのですか?

{% if messages %} 
    {% for m in messages %} 
     <div class="notification_message" data-message="{{ m }}">{{ m }}</div> 
    {% endfor %} 
    {% endif %} 

をしかし、それは愚かです!私は1つのメッセージしか持っていません。私はそれがループすることを望んでいません。 トップメッセージを表示するにはどうすればよいですか?最も重要なメッセージ。 または、成功メッセージを表示するにはどうすればよいですか?

答えて

0

私が知る限り、テンプレート自体(カスタムタグやフィルタはもちろんありません)からこれを行う方法はありません。これは、(未テスト)ただし、テンプレートの外を達成するために、かなり簡単です:

from django.contrib.messages import get_messages, constants as message_level 

def last_message(messages, level = None): 
    """Returns the last Message object in the messages with the 
    specified level, or just the last message if no level is 
    specified 
    """ 

    if level is None: 
     return None if not messages else messages[-1] 

    level = int(level) # Not strictly necessary, but Message object does this in its __init__() 
    for message in reversed(messages): 
     if message.level == level: 
      return message 
    return None 

使用法:

messages = get_messages(request) 
the_last_message = last_message(messages) 
the_last_success_message = last_message(messages, message_level.SUCCESS) 

あなたは、コンテキストを経由して、あなたのテンプレートにこれらの値を渡すことができます。

+0

{{messages.pop}}はメッセージを表示しません。結果は空白ですか? – TIMEX

+0

@TIMEX:私はあまりにも早く話しました。私が思ったように、 'messages'は配列の上に構築されていません。私は私の答えを更新します – Cameron

関連する問題