Мое решение использует подход, аналогичный предпочтительному ответу Неда, но разделяет код аналитики на собственный шаблон. Я предпочитаю это, поэтому я могу просто скопировать шаблон из проекта в проект.
Вот фрагмент из моего файла context_processor:
from django.conf import settings
from django.template.loader import render_to_string
def 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': "" }
Конечно, вам нужно сказать Django, чтобы включить это в ваш контекст. В файле settings.py укажите:
TEMPLATE_CONTEXT_PROCESSORS = (
...
"context_processors.analytics",
)
У меня настроено включение кода аналитики только в том случае, если для DEBUG установлено значение False, но вы можете предпочесть отключить его от чего-то другого, возможно, от новой настройки. Я думаю, что DEBUG - хороший вариант по умолчанию, так как он предполагает, что вы не хотите отслеживать какие-либо хиты во время отладки / разработки.
Создайте настройку с помощью ключа Google Analytics:
GOOGLE_ANALYTICS_KEY = "UA-1234567-8"
Создайте шаблон с именем: «analytics / analytics.html», который включает в себя что-то вроде этого:
<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>
Наконец, перед закрывающим тегом в шаблоне base.html добавьте:
{{ analytics_code }}
Теперь ваш аналитический код будет включен только тогда, когда DEBUG = False. В противном случае ничего не будет включено.