Вопрос

Мы собираемся развернуть новый веб-сайт 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-аналитика.Самый простой способ его использования - это:

  1. Добавьте google_analytics приложение к вашему INSTALLED_APPS раздел вашего settings.py.
  2. В вашем базовом шаблоне, как правило, base.html, вставьте этот тег в самом верху: {% load analytics %}
  3. В том же шаблоне вставьте следующий код прямо перед закрывающим тегом 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.Решение без кода просто облегчает жизнь каждому.

Примечание:есть два предостережения

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

Еще один простой способ.В settings.py, Проверить debug является True, затем добавьте:

INTERNAL_IPS = (
    '127.0.0.1',
    'localhost',
)

Затем вы можете использовать что-то в своем шаблоне следующим образом:

{% if not debug %}
<script> blah blah </script>
{% endif %}

Если хотите перейти на производство, установите debug Для False.

Ссылка:http://www.djangobook.com/en/2.0/chapter09.html

Я в основном согласен с 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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top