Deploying Google Analytics With Django
First, create a way to have your development and production servers pull settings from different files, say dev.py and prod.py. There are lots of ways to do this.
Then, create a setting, GOOGLE_ANALYTICS_KEY
. In dev.py set it to the empty string. In prod.py, set it to your key, something like "UA-124465-1". Create a context processor to add this setting to all your template contexts, either as GOOGLE_ANALYTICS_KEY
, or just go ahead and add your settings module. Then, in your template, use it to conditionally include your analytics code:
{% if settings.GOOGLE_ANALYTICS_KEY %}<script> blah blah {{settings.GOOGLE_ANALYTICS_KEY}} blah blah </script>{% endif %}
A little late to the party, but there's a reusable Django app called django-google-analytics. The easiest way to use it is:
- Add the
google_analytics
application to yourINSTALLED_APPS
section of yoursettings.py
. - In your base template, usually a
base.html
, insert this tag at the very top:{% load analytics %}
- In the same template, insert the following code right before the closing body tag:
{% analytics "UA-xxxxxx-x" %}
theUA-xxxxxx-x
is a unique Google Analytics code for your domain.
My solution takes a similar approach to Ned's preferred answer, but separates the analytics code into its own template. I prefer this, so I can just copy the template from project to project.
Here's a snippet from my context_processor file:
from django.conf import settingsfrom django.template.loader import render_to_stringdef analytics(request): """ Returns analytics code. """ if not settings.DEBUG: return { 'analytics_code': render_to_string("analytics/analytics.html", { 'google_analytics_key: settings.GOOGLE_ANALYTICS_KEY }) } else: return { 'analytics_code': "" }
Of course you'll need to tell Django to include this in your context. In in your settings.py file, include:
TEMPLATE_CONTEXT_PROCESSORS = ( ... "context_processors.analytics",)
I have it set up to include the analytics code only when DEBUG is set to False, but you may prefer to key it off something else, perhaps a new setting altogether. I think DEBUG is a good default since it supposes you don't want to track any hits while debugging/developing.
Create a setting with your Google Analytics Key:
GOOGLE_ANALYTICS_KEY = "UA-1234567-8"
Create a template called: "analytics/analytics.html" that includes something like this:
<script type="text/javascript">var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));</script><script type="text/javascript">try {var pageTracker = _gat._getTracker("{{ google_analytics_key }}");pageTracker._trackPageview();} catch(err) {}</script>
Finally, just before the closing tag in your base.html template, add this:
{{ analytics_code }}
Now your analytics code will be included only when DEBUG=False. Otherwise, nothing will be included.