Развертывание Google Analytics с помощью Django - PullRequest
27 голосов
/ 10 марта 2009

Мы собираемся развернуть новый веб-сайт Django и хотим использовать Google Analytics для отслеживания трафика на сайте. Однако мы не хотим, чтобы все попадания в экземпляры разработки вносили вклад в статистику Google Analytics.

Есть несколько способов справиться с этим:

  • есть опция конфигурации в settings.py, которую базовый шаблон использует, чтобы решить, включать или нет соответствующие элементы <script>,
  • поддерживает ветку, в которую мы втягиваемся перед развертыванием на производственном сервере, которая, как мы уверены, включает элементы <script>,
  • сделать что-то с Google Analytics, чтобы заблокировать попадания на 127.0.0.1 или localhost, или
  • что-то еще.

Первый вариант кажется наиболее разумным, но я не уверен, что это так. Например, должны ли мы начать передавать переменную google_analytics во все наши представления?

Что вы думаете?

Ответы [ 10 ]

43 голосов
/ 10 марта 2009

Во-первых, создайте способ, чтобы ваши серверы разработки и производства извлекали настройки из разных файлов, например 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 %}
11 голосов
/ 13 октября 2009

Немного опоздал на вечеринку, но есть многоразовое приложение Django под названием django-google-analytics . Самый простой способ его использования:

  1. Добавьте приложение google_analytics в раздел INSTALLED_APPS вашего settings.py.
  2. В базовом шаблоне, обычно base.html, вставьте этот тег в самый верх: {% load analytics %}
  3. В том же шаблоне вставьте следующий код прямо перед закрывающим тегом body: {% analytics "UA-xxxxxx-x" %} UA-xxxxxx-x - уникальный код Google Analytics для вашего домена.
8 голосов
/ 16 сентября 2009

Мое решение использует подход, аналогичный предпочтительному ответу Неда, но разделяет код аналитики на собственный шаблон. Я предпочитаю это, поэтому я могу просто скопировать шаблон из проекта в проект.

Вот фрагмент из моего файла 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. В противном случае ничего не будет включено.

5 голосов
/ 09 июля 2012

Все эти другие решения могут работать, но теперь они все излишни, потому что вы можете легко настроить фильтр в Google Analytics, чтобы отфильтровывать весь трафик, который не поступает с вашего рабочего сайта или веб-сайтов. См. Создание / управление профилем Фильтры в справке GA. Решение без кода просто облегчает жизнь всем.

Примечание : есть две оговорки

  1. это не работает с фильтрацией в реальном времени, потому что фильтры не применяются к реальному времени (по состоянию на июль 2012 года - проверьте их документы)
  2. Вы должны быть администратором с учетной записью Google Analytics, чтобы настроить
3 голосов
/ 22 декабря 2013

Еще один простой способ. В settings.py , Отметьте 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

2 голосов
/ 11 марта 2009

Вместо того, чтобы включать тег script непосредственно в ваш html, просто измените javascript аналитики, чтобы он работал только в том случае, если href не содержит название вашего сайта. Это будет работать без какой-либо дополнительной настройки.

2 голосов
/ 10 марта 2009

Я в основном согласен с Недом, хотя у меня есть одна настройка, которая называется IS_LIVE_SITE, которая переключает аналитический код, рекламу и некоторые другие вещи. Таким образом, я могу сохранить все ключи в подрывной деятельности (так как их трудно найти) и при этом легко включать и выключать их.

0 голосов
/ 26 марта 2017

Привет всем, это довольно старый пост .. Но так как я потратил некоторое время на поиск некоторых приложений многократного использования, которые все еще активно поддерживаются, я хочу поделиться тем, что я нашел:

https://github.com/jcassee/django-analytical

Этот проект все еще активно поддерживается и не требует добавления идентификатора в базу данных (я думаю, что лучше, если у вас есть один проект на сайт), поэтому он обнажается в коде независимо от того, является ли среда разработкой или производством .

0 голосов
/ 20 апреля 2013

Вот чертовски простой способ, которым я решил это:

Создайте приложение в своем проекте под названием «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',

)

Надеюсь, это поможет!

0 голосов
/ 10 марта 2009

У вас есть обработчики контекста шаблона, которые можно использовать для передачи значений во все шаблоны без обновления всех ваших представлений.

http://docs.djangoproject.com/en/dev/ref/settings/#template-context-processors

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...