Django hit counter application that tracks the number of hits/views for chosen objects
Pull request Compare This branch is 6 commits ahead, 198 commits behind thornomad:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Basic app that allows you to track the number of hits/views for a particular object.

For more information you can view comments in the source code or visit:

What it is not

This is not meant to be a user tracking app (see: [django-tracking][1]) or a comprehensive site traffic monitoring tool (see: Google Analytics).

It's meant to serve as a simple hit counter for chosen objects with a couple useful features (user-agent, session, and IP tracking) and tools to help you on your way.


I would love to make it better. Please fork and push. Some fun additions might be [1] a nice graphing utility for the admin site, [2] another approach to caputring a hit (other than jQuery), and [3] a cleanup tool that can remove Hit objects after a certain period (cron job).


Simplest way to formally install is to run:

./ install

Or, you could do a PIP installation:

pip install -e git://

Or, you can link the source to your site-packages directory. This is useful if you plan on pulling future changes and don't want to keep running ./ install.

cd ~/src
git clone
sudo ln -s `pwd`/django-hitcount/hitcount `python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"`/hitcount

Then modify your, adding the package hitcount in INSTALLED_APPS


There are three additional settings you can add to your file:


HITCOUNT_KEEP_HIT_ACTIVE: is the number of days, weeks, months, hours, etc (timedelta kwargs), that an Hit is kept ‘active’. If a Hit is ‘active’ a repeat viewing will not be counted. After the active period ends, however, a new Hit will be recorded. You can decide how long you want this period to last …

HITCOUNT_HITS_PER_IP_LIMIT: limit the number of ‘active’ hits from a single IP address. 0 means that it is unlimited. You may want to set this, or not.

HITCOUNT_EXCLUDE_USER_GROUP: don’t count any hits from certain logged in users. In the example above, I don’t want any of my editors inflating the total Hit count.

You need to add one line to your file.

urlpatterns = patterns('',
    url(r'^ajax/hit/$', # you can change this url if you would like
        name='hitcount_update_ajax'), # keep this name the same

Edit your templates

{% load hitcount_tags %}
<script type="text/javascript">
    var csrf_token = '{{ csrf_token }}';
    $(document).ready(function() {
        {% get_hit_count_javascript for object %}

Display the hits!

  • Return total hits for an object: {% get_hit_count for [object] %}

  • Get total hits for an object as a specified variable: {% get_hit_count for [object] as [var] %}

  • Get total hits for an object over a certain time period: {% get_hit_count for [object] within ["days=1,minutes=30"] %}

  • Get total hits for an object over a certain time period as a variable: {% get_hit_count for [object] within ["days=1,minutes=30"] as [var] %}