2016-03-18 113 views
1

我正在使用Django消息框架來顯示反饋消息。我無法顯示一條成功消息。Django消息框架 - 如何僅顯示成功消息

這裏的改編代碼從溶液suggested here和文檔:

{% for message in messages.success %} 
    {% if 'success' in message.tags %} 
    <div class="success-message">{{ message }}</div> 
    {% endif %} 
{% endfor %} 

這就產生了什麼。如果我少用判別的東西,它使我的信息完全正常:

{% for message in messages %} 
    <p>{{ message }}</p> 
{% endfor %} 

視圖創建這樣的消息:

messages.success(request, "here's a sample success message") 

我在做什麼錯?我正在使用django 1.9.2

回答

2

問題是,您正試圖迭代messages.success,這不是一個列表。在messages本身,而不是重複,併爲您的成功:

{% for message in messages %} 
    {% if message.level == DEFAULT_MESSAGE_LEVELS.SUCCESS %} 
    <div class="success-message">{{ message }}</div> 
    {% endif %} 
{% endfor %} 

事實上,在你最初的例子中,唯一的問題是試圖遍歷messages.success,而不是messages。你的標籤檢查也應該工作,即使它是不是很「乾淨」:

{% for message in messages %} 
    {% if 'success' in message.tags %} 
    <div class="success-message">{{ message }}</div> 
    {% endif %} 
{% endfor %} 
+0

史蒂夫,這似乎不起作用。對於遲到的回覆,我只是在複製shell上的錯誤時遇到問題,因爲有一個奇怪的'django.contrib.messages.middleware.MessageMiddleware'沒有安裝錯誤(它被安裝並且'django.contrib.messages'導入罰款)。 – Escher

+0

這很令人沮喪。你的'如果'成功'在message.tags'應該工作。 –

+0

您的TEMPLATES設置中定義的DjangoTemplates後端的'context_processors'選項是否包含'django.contrib.messages.context_processors.messages'? –

0

您應該使用== -operator而不是in。並且沒有必要使用messages.success

{% for message in messages %} 
    {% if 'success' == message.tags %} 
    <div class="success-message">{{ message }}</div> 
    {% endif %} 
{% endfor %} 
+1

。標籤可以包含多個條目,所以平等不一定是正確的選擇。 –

0

Message.success不迭代。這就是爲什麼你沒有收到任何消息。您還可以使用視圖中的方法get_success_message來僅呈現成功消息。