2011-04-20 62 views
1

編輯 我正在構建一個網站的消息部分,但由於某種原因,我只注意到該函數實際上不會在模板中顯示消息。下面是函數和模板收件箱頁面:Django模板變量,RequestContext和上下文處理器

def show_inbox(request): 
u = request.user 
messages = Message.objects.filter(to_user=u) 
context = RequestContext(request,{'messages':messages}) 
return render_to_response('users/messaging/inbox.html',context_instance=context) 

<table class="table-list" cellspacing="0"> 
      <th>Subject</th> 
      <th>Recieved at</th> 
      <th>Read</th> 
      <th>Replied</th> 
      {% if not messages %} 
       <tr><td class="left">No messages</td></tr> 
      {% endif %} 
      {% for message in messages %} 
      <tr class="{% if forloop.counter|divisibleby:2 %}even{% else %}odd{% endif %}"> 
       <td class="left largetd"> 
        <a href="{{ message.from_user.get_absolute_url }}"><img src="{{ message.from_user.profile_pic }}" class="small-pic" /></a>&nbsp;&nbsp; 
        <a href="{{ message.get_absolute_url }}">{{ message.message_subject }}</a> 
       </td> 
       <td class="text-center"> 
         <span class="small-text italics">{{ message.message_date_time }}</span> 
       </td> 
       <td class="smalltd text-center">{{ message.message_is_read }}</td> 
       <td class="smalltd text-center"></td> 
      </tr> 
      {% endfor %} 
     </table> 
+0

我不確定我是否得到了您的問題。你能解釋一下自己嗎? – fceruti 2011-04-20 03:45:22

+0

當然。在顯示所有消息的收件箱頁面上,出於某種原因,它不會將消息變量傳遞到模板中。根據我發佈的內容,模板總是呈現「無信息」。我似乎無法找到爲什麼這些消息沒有顯示出來。 – vol4life27 2011-04-20 03:48:39

回答

3

已檢查你調用render_to_response()這個右前消息變量實際上有消息?否則,查看源代碼生成的HTML並查看是否有任何內容。您錯過了標題單元格周圍的標籤。

此外,請嘗試調用render_to_response稍微不同。

return render_to_response('users/messaging/inbox.html', {'messages': messages}) 

默認情況下,模板將使用填充有從提供的字典值上下文實例呈現。所以你可以用這個更簡單的形式來調用它。您沒有在視圖模板中使用任何請求變量,因此您不需要RequestContext,它使用context processors爲您的模板提供從請求中提取的附加信息。

@fceruti與django.contrib.messages發生衝突是正確的。當您使用RequestContext時,Django循環訪問TEMPLATE_CONTEXT_PROCESSORS(在settings.py文件中聲明)以爲您的模板提供更多變量。特別是'django.contrib.messages.context_processors.messages'增加了一個消息變量,它覆蓋了你自己的。改變你的變量的名稱,你會沒事的。

每個處理器按順序應用。這意味着,如果一個處理器將 變量添加到上下文中,並且第二個 處理器將同名變量添加到 ,則第二個將覆蓋第一個 。

+0

那麼工作,但爲什麼它不會在RequestContext裏面工作,我想知道..嗯..奇怪。感謝壽!我從來沒有想過嘗試這 – vol4life27 2011-04-20 04:01:43

+0

這似乎是問題所在。您可以更改變量名稱,也可以從安裝的應用程序中刪除「django.contrib.messages」。消息框架正在使用「消息」。 – fceruti 2011-04-20 04:02:42

+0

太棒了,很高興它的工作。它更簡單的代碼!將嘗試解釋更新答案。 – JCotton 2011-04-20 04:05:50