Django:新帖子通知

时间:2011-10-10 12:52:01

标签: django templates time notifications render

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

<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

1 个答案:

答案 0 :(得分:2)

这或多或少是由TemplateResponse使用的新TemplateView类的重点 - 它允许您在调用render_to_response后修改项目并将这些修改显示在输出

要明确禁用该功能,您只需在render()的结果上调用render_to_response即可。

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

return response

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