2012-04-18 104 views
1

我試圖在Django中使用消息中間件,但視圖根本不會顯示它。我擁有的一切:Django中的消息中間件不能在模板中顯示

views.py

messages.success(request, 'Test message.') 
return render_to_response('base.html') 

template.html

<ul class="messages"> 
    {% for message in messages %} 
    <li class="{{ message.tags }}">{{ message }}</li> 
    {% endfor %} 
</ul> 

當我做到這一點的看法:

for message in messages.get_messages(request): 
    print message 

它打印一個消息,每次自從我上次使用這個函數以來,我調用了視圖,所以它肯定會將消息保存在某個地方。它只是沒有發送到模板。

附加信息:

  • Django的版本=(1,2,3, '最終',0)
  • 我加入 'django.contrib.messages.context_processors.messages' 來TEMPLATE_CONTEXT_PROCESSORS。注意:我沒有TEMPLATE_CONTEXT_PROCESSORS,即使它應該在Django 1.2之後,所以我只是添加了它。我猜它可能不能正常工作,這可能是問題,但我不知道如何檢查它是否正確配置。
  • 我按照https://docs.djangoproject.com/en/dev/ref/contrib/messages/進行設置。

回答

3

你需要渲染一個RequestContext,而不是僅僅Context模板(其中render_to_response默認使用),以使模板可用模板context處理器。退房optional arguments section of the render_to_response docs然後改變:

return render_to_response('base.html', context_instance=RequestContext(request)) 
+0

謝謝,這幫助,但我認爲這是沒有必要的,如果我加入「django.contrib.messages.context_processors.messages」到TEMPLATE_CONTEXT_PROCESSORS。或者我還需要他們兩個嗎? – olofom 2012-04-18 08:43:02

+0

將它添加到'TEMPLATE_CONTEXT_PROCESSORS'只是表示它已被啓用。你需要在你的視圖中使用'RequestContext'來真正地使模板中的'TEMPLATE_CONTEXT_PROCESSORS'中使用的所有上下文處理器都可用。 – 2012-04-18 08:48:33

+2

此外,檢查'渲染'快捷方式:https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#render – Dor 2012-04-18 08:49:08