2009-03-10 48 views
25

Estamos a punto de implementar un nuevo sitio web de Django, y queremos utilizar Google Analytics para realizar un seguimiento del tráfico en el sitio. Sin embargo, no queremos que todas las visitas en las instancias de desarrollo contribuyan a las estadísticas de Google Analytics.Implementación de Google Analytics con Django

Hay algunas maneras que podríamos hacer frente a esto:

  • tienen una opción de configuración en el que settings.py la plantilla base utiliza para decidir si se incluye o no los elementos apropiados, <script>
  • a mantener una rama que entramos a antes de implementar el servidor de producción, lo que nos aseguramos incluye los elementos <script>,
  • hacer algo con Google Analytics para bloquear accesos a 127.0.0.1 o localhost, o
  • algo electrónico lse.

La primera opción parece ser la más sensata, pero no estoy seguro si lo es. Por ejemplo, ¿tendríamos que empezar a pasar una variable google_analytics en todas nuestras vistas?

¿Cuáles son sus pensamientos?

Respuesta

39

Primero, cree una forma para que sus servidores de desarrollo y producción obtengan configuraciones de diferentes archivos, digamos dev.py y prod.py. Hay muchas formas de hacer esto.

A continuación, cree una configuración, GOOGLE_ANALYTICS_KEY. En dev.py, establézcalo en la cadena vacía. En prod.py, configúrelo en su clave, algo así como "UA-124465-1". Cree un context processor para agregar esta configuración a todos sus contextos de plantilla, ya sea como GOOGLE_ANALYTICS_KEY, o simplemente continúe y agregue su módulo de configuración. Luego, en su plantilla, lo utilizan para incluir condicionalmente el código de análisis:

{% if settings.GOOGLE_ANALYTICS_KEY %} 
<script> blah blah {{settings.GOOGLE_ANALYTICS_KEY}} blah blah </script> 
{% endif %} 
+0

Gracias Ned, esperaba que este fuera el camino a seguir. :) –

2

estoy básicamente de acuerdo con Ned, aunque no tengo un solo ajuste llamado IS_LIVE_SITE que conmuta código de Analytics, anuncios y algunas otras cosas. De esta forma puedo mantener todas las claves en subversión (ya que es una molestia buscarlas) y aún así activarlas o desactivarlas fácilmente.

2

En lugar de incluir la etiqueta de script directamente en su html, simplemente cambie la javascript analítica para que solo se ejecute si la href no contiene el nombre de su sitio prod. Esto funcionará sin ninguna configuración adicional.

+0

Solución muy simple. [Aquí] (http://stackoverflow.com/a/8178283/5802289) un ejemplo. – J0ANMM

6

Mi solución adopta un enfoque similar a la respuesta preferida de Ned, pero separa el código de análisis en su propia plantilla. Yo prefiero esto, así que solo puedo copiar la plantilla de un proyecto a otro.

He aquí un fragmento de mi archivo 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': "" } 

Por supuesto, tendrá que indicar Django para incluir esto en su contexto. En tu configuraciónarchivo py, incluyen:

TEMPLATE_CONTEXT_PROCESSORS = (
    ... 
    "context_processors.analytics", 
) 

lo tengo configurado para incluir el código de análisis sólo cuando de depuración se establece en False, pero usted puede preferir que introducirlos fuera algo más, tal vez un nuevo ajuste completo. Creo que DEBUG es un buen valor por defecto, ya que supone que no desea realizar ningún seguimiento mientras se depura/desarrolla.

Crear un entorno con su clave de Google Analytics:

GOOGLE_ANALYTICS_KEY = "UA-1234567-8" 

Crear una plantilla llamada: "analytics/analytics.html" que incluye algo como esto:

<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> 

Por último, justo antes de la etiqueta de cierre en su plantilla base.html, agregue esto:

{{ analytics_code }} 

Ahora su código de análisis se incluirá solo cuando DEBUG = False. De lo contrario, nada será incluido.

10

Un poco tarde para la fiesta, pero hay una aplicación Django reutilizable llamada django-google-analytics. La forma más fácil de utilizar que es:

  1. añadir la aplicación google_analytics a la sección de su INSTALLED_APPSsettings.py.
  2. En su plantilla base, por lo general un base.html, insertar esta etiqueta en la parte superior: {% load analytics %}
  3. En la misma plantilla, inserte el siguiente código justo antes de la etiqueta del cuerpo de cierre: {% analytics "UA-xxxxxx-x" %} la UA-xxxxxx-x es un único código de Google Analytics para Tu dominio.
5

Todas estas otras soluciones podría funcionar, pero todos ellos son una exageración, porque ahora se puede configurar fácilmente un filtro en Google Analytics para filtrar todo el tráfico que no está viniendo de su sitio de producción o sitios web. Consulte Create/Manage Profile Filtros en la Ayuda de GA. Una solución sin código solo hace la vida de todos más fácil.

Nota: Hay dos advertencias

  1. esto no funciona con el filtrado en tiempo real, ya que no hay filtros se aplican a tiempo real (a partir de julio 2012 - verificar sus documentos)
  2. usted tiene para ser un administrador con los de Google Analytics para configurar esto
0

Aquí es la forma más sencilla muertos que lo resolví:

Cree una aplicación en su proyecto llamada 'utils' si aún no lo ha hecho. Ver these directions.

Sin embargo, siga este enfoque para incluir todos los procesadores de contexto global además de la configuración del proyecto. Parece ser una mejor práctica. Aquí están los instructions.

Entonces, después de crear su aplicación 'utils', cree un archivo llamado context_processors.py/utils en el que se ve así:

from django.conf import settings 

def googleanalytics(request): 
    return { 
     'google_tracking_id' : settings.GOOGLE_TRACKING_ID, 
    } 

en usted archivo settings.py, añadir lo siguiente:

import django.conf.global_settings as DEFAULT_SETTINGS 

TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_SETTINGS.TEMPLATE_CONTEXT_PROCESSORS + (
    'utils.context_processors.googleanalytics', 

)

Espero que esto ayude!

2

Otra manera simple. En settings.py, Check debug es True, a continuación, añadir:

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

continuación, puede utilizar las cosas en su plantilla como esta:

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

Si desea cambiar a la producción, establecer debug a False.

Ref: http://www.djangobook.com/en/2.0/chapter09.html

0

Hola a todos que es un puesto bastante viejo .. Pero ya que pasé algún tiempo en la búsqueda de alguna aplicación reutilizable que aún se mantiene activa quiero compartir lo que he encontrado:

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

Este proyecto todavía se mantiene activamente y no requiere que se agregue la ID a la base de datos (creo que es mejor si tiene un proyecto por sitio) por lo que está desnudo en el código no importa si el entorno es desarrollo o producción .