Развертывание Google Analytics с помощью Django
-
08-07-2019 - |
Вопрос
Мы собираемся развернуть новый веб-сайт Django и хотим использовать Google Analytics для отслеживания трафика на сайте.Однако мы не хотим, чтобы все обращения к экземплярам разработки вносили свой вклад в статистику Google Analytics.
Есть несколько способов, которыми мы могли бы справиться с этим:
- есть параметр конфигурации в настройках.py, который базовый шаблон использует для принятия решения о том, включать или не включать соответствующие
<script>
элементы, - поддерживайте ветку, в которую мы подключаемся перед развертыванием на рабочем сервере, который, как мы гарантируем, включает
<script>
элементы, - сделайте что-нибудь с Google Analytics, чтобы заблокировать обращения к 127.0.0.1 или localhost, или
- что-то еще.
Первый вариант кажется наиболее разумным, но я не уверен, так ли это.Например, должны ли мы начать передавать google_analytics
переменная во всех наших представлениях?
О чем вы думаете?
Решение
Во-первых, создайте способ, чтобы ваши серверы разработки и производства извлекали настройки из разных файлов, скажем dev.py и prod.py.Есть много способов сделать это.
Затем создайте настройку, GOOGLE_ANALYTICS_KEY
.В dev.py установите его в пустую строку.В разделе prod.py установите для него свой ключ, что-то вроде "UA-124465-1".Создать контекстный процессор чтобы добавить этот параметр ко всем контекстам вашего шаблона, либо как GOOGLE_ANALYTICS_KEY
, или просто продолжайте и добавьте свой модуль настроек.Затем используйте его в своем шаблоне для условного включения кода аналитики:
{% if settings.GOOGLE_ANALYTICS_KEY %}
<script> blah blah {{settings.GOOGLE_ANALYTICS_KEY}} blah blah </script>
{% endif %}
Другие советы
Немного опоздал на вечеринку, но есть многоразовое приложение Django под названием django-google-аналитика.Самый простой способ его использования - это:
- Добавьте
google_analytics
приложение к вашемуINSTALLED_APPS
раздел вашегоsettings.py
. - В вашем базовом шаблоне, как правило,
base.html
, вставьте этот тег в самом верху:{% load analytics %}
- В том же шаблоне вставьте следующий код прямо перед закрывающим тегом body:
{% analytics "UA-xxxxxx-x" %}
вUA-xxxxxx-x
это уникальный код Google Analytics для вашего домена.
Мое решение использует подход, аналогичный предпочтительному ответу Ned, но выделяет код analytics в свой собственный шаблон.Я предпочитаю это, поэтому я могу просто копировать шаблон из проекта в проект.
Вот фрагмент из моего файла 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",
)
Я настроил его на включение кода 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 .В противном случае ничего не будет включено.
Все эти другие решения могут работать, но сейчас все они излишни, потому что вы можете легко настроить фильтр в Google Analytics для отсеивания всего трафика, который поступает не с вашего производственного сайта или веб-сайтов.Видишь Создание профиля / Управление им Фильтры в справке GA.Решение без кода просто облегчает жизнь каждому.
Примечание:есть два предостережения
- это не работает с фильтрацией в реальном времени, потому что к реальному времени фильтры не применяются (по состоянию на июль 2012 года - проверьте их документы)
- чтобы настроить это, вы должны быть администратором учетной записи Google Analytics
Еще один простой способ.В settings.py
, Проверить debug
является True
, затем добавьте:
INTERNAL_IPS = (
'127.0.0.1',
'localhost',
)
Затем вы можете использовать что-то в своем шаблоне следующим образом:
{% if not debug %}
<script> blah blah </script>
{% endif %}
Если хотите перейти на производство, установите debug
Для False
.
Я в основном согласен с Ned, хотя у меня есть единственная настройка под названием IS_LIVE_SITE, которая переключает код аналитики, рекламу и несколько других вещей.Таким образом, я могу сохранить все ключи в subversion (так как их очень сложно искать) и при этом легко включать или выключать их.
Вместо того чтобы включать тег script непосредственно в свой html-код, просто измените javascript analytics, чтобы он запускался только в том случае, если href не содержит названия вашего сайта prod.Это будет работать без какой-либо дополнительной настройки.
У вас есть процессоры контекста шаблона, которые можно использовать для передачи значений всем шаблонам без обновления всех ваших представлений.
http://docs.djangoproject.com/en/dev/ref/settings/#template-context-processors
Вот самый простой способ, которым я решил эту проблему:
Создайте приложение в своем проекте под названием "utils", если вы еще этого не сделали.Видишь эти направления.
Однако следуйте этому подходу, чтобы включить все обработчики глобального контекста в дополнение к настройкам проекта.Кажется, это лучшая практика.Вот эти Инструкции.
Итак, после создания вашего приложения "utils" создайте файл с именем context_processors.py в / utils, который выглядит следующим образом:
from django.conf import settings
def googleanalytics(request):
return {
'google_tracking_id' : settings.GOOGLE_TRACKING_ID,
}
В тебе settings.py файл, добавь это:
import django.conf.global_settings as DEFAULT_SETTINGS
TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_SETTINGS.TEMPLATE_CONTEXT_PROCESSORS + (
'utils.context_processors.googleanalytics',
)
Надеюсь, это поможет!
Всем привет, это довольно старый пост..Но поскольку я потратил некоторое время на поиск какого-нибудь многоразового приложения, которое все еще активно поддерживается, я хочу поделиться тем, что я нашел:
https://github.com/jcassee/django-analytical
Этот проект все еще активно поддерживается и не требует добавления идентификатора в базу данных (я думаю, будет лучше, если у вас будет по одному проекту на сайт), поэтому он отображается в коде независимо от того, является ли среда разработкой или производством.