2011-10-10 64 views
1

我试图做一个简单的通知,当有人发布了一个新的论坛帖子。这曾经在过去工作,但现在它并没有出于某种原因。我不知道我做了什么来打破它。在我的index.html模板中,我做了一个时间比较:Django:新帖子通知

<li class="{% if topic.topic_last_post.post_time > request.user.last_login %}bold notification{% endif %}">...</li> 

比较起作用。但是,在呈现模板之前,似乎request.user.last_login已更新。这是我的视图代码。这是对的吗?

class FrontpageView(TemplateView): 
    template_name = "frontpage/index.html" 

    def render_to_response(self, context, **response_kwargs): 
     t = TemplateView.render_to_response(self, context, **response_kwargs) 
     if self.request.user.is_authenticated(): 
      now = datetime.datetime.now() 
      self.request.user.last_login = now 
      self.request.user.save() 
     return t 

回答

2

这是新TemplateResponse类,它使用TemplateView或多或少的一点 - 它可以让你调用render_to_response后修改的项目,并将这些修改在输出显示。

要明确禁用该功能,您可以对render_to_response的结果调用render()

response = super(FrontpageView, self).render_to_response(content, **response_kwargs) 
reponse.render() 
if ... 

return response 

(另请注意,您应该使用super而不是直接指定类名。)