Развертывание Google Analytics с помощью Django
Мы собираемся развернуть новый сайт Django, и мы хотим использовать Google Analytics для отслеживания трафика на сайте. Однако мы не хотим, чтобы все обращения к экземплярам разработки вносили вклад в статистику Google Analytics.
Есть несколько способов справиться с этим:
- имеет параметр конфигурации в settings.py, который используется базовым шаблоном, чтобы решить, включать или нет соответствующие элементы
<script>
,
- поддерживайте ветвь, которую мы втягиваем, прежде чем развертывать на производственный сервер, который мы обеспечиваем, включает элементы
<script>
,
- что-то делать с Google Analytics, чтобы блокировать показы до 127.0.0.1 или localhost или
- что-то еще.
Первый вариант кажется самым разумным, но я не уверен, что это так. Например, нужно ли нам начинать передавать переменную google_analytics
во все наши представления?
Каковы ваши мысли?
Ответы
Ответ 1
Сначала создайте способ, чтобы ваши серверы разработки и производства извлекали настройки из разных файлов, например 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 %}
Ответ 2
Немного поздно для вечеринки, но есть многоразовое приложение Django, называемое django-google-analytics. Самый простой способ его использования:
- Добавьте приложение
google_analytics
в свой INSTALLED_APPS
раздел settings.py
.
- В базовом шаблоне, обычно
base.html
, вставьте этот тег в самый верх: {% load analytics %}
- В том же шаблоне вставьте следующий код прямо перед тегом закрывающего тега:
{% analytics "UA-xxxxxx-x" %}
UA-xxxxxx-x
- это уникальный код Google Analytics для вашего домена.
Ответ 3
Мое решение использует аналогичный подход к предпочтению Ned, но отделяет код аналитики от собственного шаблона. Я предпочитаю это, поэтому я могу просто скопировать шаблон из проекта в проект.
Вот фрагмент из моего файла 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. В противном случае ничего не будет включено.
Ответ 4
Все эти другие решения могут работать, но теперь они все переполнены, потому что вы можете легко настроить фильтр в Google Analytics, чтобы отфильтровать весь трафик, который не поступает с вашего веб-сайта или веб-сайта. См. Создать/управлять профилем Фильтры в справке GA. Решение без кода просто облегчает жизнь.
Примечание: есть две оговорки
- это не работает с фильтрацией в реальном времени, потому что фильтры не применяются в реальном времени (по состоянию на июль 2012 года - проверяют их документы).
- вы должны быть администратором учетной записи Google Analytics, чтобы установить это.
Ответ 5
Я в основном согласен с Ned, хотя у меня есть один параметр IS_LIVE_SITE, который переключает код аналитики, рекламные объявления и некоторые другие вещи. Таким образом, я могу сохранить все ключи в подрывной деятельности (так как это боль, чтобы их просмотреть) и все же легко переключаться на них.
Ответ 6
Вместо того, чтобы включать тег script непосредственно в ваш html, просто измените javascript analytics, чтобы он запускался только в том случае, если href не содержит ваше имя сайта prod. Это будет работать без дополнительной настройки.
Ответ 7
Еще один простой способ.
В settings.py
Check debug
есть True
, затем добавьте:
INTERNAL_IPS = (
'127.0.0.1',
'localhost',
)
Затем вы можете использовать вещи в своем шаблоне следующим образом:
{% if not debug %}
<script> blah blah </script>
{% endif %}
Если вы хотите перейти к производству, установите debug
в False
.
Ref:
http://www.djangobook.com/en/2.0/chapter09.html
Ответ 8
У вас есть шаблонные контекстные процессоры, которые можно использовать для передачи значений всем шаблонам без обновления всех ваших представлений.
http://docs.djangoproject.com/en/dev/ref/settings/#template-context-processors
Ответ 9
Здесь мертвый простой способ, которым я его решил:
Создайте приложение в своем проекте под названием "utils", если вы еще этого не сделали. См. эти направления.
Однако следуйте этому подходу, чтобы включить все глобальные процессинговые процессы в дополнение к настройкам проекта. Кажется, это лучшая практика. Ниже приведены инструкции .
Итак, создав приложение "utils", создайте файл context_processors.py in/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',
)
Надеюсь, это поможет!
Ответ 10
Привет всем, это довольно старый пост.
Но поскольку я потратил некоторое время на поиск некоторого многоразового приложения, которое все еще активно поддерживается, я хочу поделиться тем, что нашел:
https://github.com/jcassee/django-analytical
Этот проект по-прежнему активно поддерживается и не требует добавления идентификатора в базу данных (я думаю, это лучше, если у вас есть один проект на сайт), поэтому он оговорен в коде независимо от того, является ли среда разработкой или производством.