点击Django页面的计数器

时间:2010-08-04 22:03:53

标签: django

我希望有一个页面计数器,显示在我的网站上查看过特定页面的访问者数量。是否可以使用Django执行此操作?

3 个答案:

答案 0 :(得分:9)

“页面计数器”是什么?一段持久的数据,由视图函数更新并由模板显示。

正如您无疑已经意识到的那样,所有Django都有以下几个部分。

  1. 模型
  2. 查看功能
  3. 模板
  4. <强>模型

    如果要将页面计数器保留在数据库中,则需要Django模型。

    class PageCounter( Model ):
    

    您需要在此模型中添加一行。通常情况下,“fixture”会帮助实现这一点,因为它只有一行而你只需要在执行syncdb时将它放入一次。

    查看功能

    然后,您需要在视图函数中获取并更新页面计数器。

    pageCounter= PageCounter.objects.all()[0] 
    pageCounter.count += 1
    pageCounter.save()
    

    <强>模板

    现在您需要为模板提供值,以便显示它。

答案 1 :(得分:9)

有一个名为django-hitcount的问题的Django应用程序。它易于使用,并且可以在任何项目中重复使用。

答案 2 :(得分:1)

我知道这是一个老帖子,但偶尔人们可能会有同样的问题。

如果您想避开第三方库并阻止计数器在每次刷新页面时更新,您可以执行以下Mixin(以S.Lott的答案为基础)

class BlogPostCounterMixin(object):
    def get_context_data(self, **kwargs):
        context = super(BlogPostCounterMixin, self).get_context_data(**kwargs)
        blog_post_slug = self.kwargs['slug']
        if not blog_post_slug in self.request.session:
            bp = BlogPost.objects.filter(slug=blog_post_slug).update(counter=+1)
            # Insert the slug into the session as the user has seen it
            self.request.session[blog_post_slug] = blog_post_slug
    return context

它检查所访问的模型是否已存储在会话中。如果它已存储在会话中,则会跳过递增,否则它会递增计数器并将模型的slug添加到会话中,从而阻止页面刷新的增量。

注意:这是您需要添加到视图中的Mixin。