2011-04-20 65 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