python - Implementando Google Analytics con Django
deployment google-analytics (10)
Estamos a punto de implementar un nuevo sitio web de Django y queremos usar Google Analytics para realizar un seguimiento del tráfico en el sitio. Sin embargo, no queremos que todos los resultados en instancias de desarrollo contribuyan a las estadísticas de Google Analytics.
Hay algunas maneras en que podríamos lidiar con esto:
- tener una opción de configuración en settings.py que la plantilla base utiliza para decidir si incluir o no los elementos
<script>
apropiados, - mantenemos una rama a la que accedemos antes de implementarla en el servidor de producción, lo que aseguramos incluye los elementos
<script>
, - hacer algo con Google Analytics para bloquear visitas a 127.0.0.1 o localhost, o
- algo más.
La primera opción parece la más sensata, pero no estoy seguro de si lo es. Por ejemplo, ¿tendríamos que empezar a pasar una variable google_analytics
a todas nuestras vistas?
¿Cuáles son tus pensamientos?
Aquí está la manera simple y simple en que lo resolví:
Crea una aplicación en tu proyecto llamada ''utils'' si aún no lo has hecho. Vea estas direcciones .
Sin embargo, siga este enfoque para incluir todos los procesadores de contexto globales además de la configuración del proyecto. Parece ser una mejor práctica. Aquí están las instructions .
Entonces, después de crear su aplicación ''utils'', cree un archivo llamado context_processors.py en / utils que tenga este aspecto:
from django.conf import settings
def googleanalytics(request):
return {
''google_tracking_id'' : settings.GOOGLE_TRACKING_ID,
}
En su archivo settings.py, agregue esto:
import django.conf.global_settings as DEFAULT_SETTINGS
TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_SETTINGS.TEMPLATE_CONTEXT_PROCESSORS + (
''utils.context_processors.googleanalytics'',
)
¡Espero que esto ayude!
En lugar de incluir la etiqueta de script directamente en su html, simplemente cambie el javascript de análisis para que solo se ejecute si el href no contiene el nombre de su sitio de producción. Esto funcionará sin ninguna configuración adicional.
Estoy más de acuerdo con Ned, aunque tengo una configuración única llamada IS_LIVE_SITE que alterna el código analítico, anuncios y algunas otras cosas. De esta forma puedo mantener todas las claves en subversión (ya que es un dolor buscarlas) y aún así activarlas o desactivarlas fácilmente.
Hola, todo es un post bastante antiguo. Pero como pasé un tiempo buscando una aplicación reutilizable que todavía se mantiene activamente, quiero compartir lo que encontré:
https://github.com/jcassee/django-analytical
Este proyecto aún 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 se incluye en el código sin importar si el entorno es de desarrollo o producción.
Mi solución tiene un enfoque similar a la respuesta preferida de Ned, pero separa el código analítico en su propia plantilla. Prefiero esto, así que solo puedo copiar la plantilla de proyecto a proyecto.
Aquí hay 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, deberás decirle a Django que incluya esto en tu contexto. En su archivo settings.py, incluya:
TEMPLATE_CONTEXT_PROCESSORS = (
...
"context_processors.analytics",
)
Lo tengo configurado para incluir el código analítico solo cuando DEBUG está configurado como Falso, pero es posible que prefiera borrarlo de alguna otra forma, tal vez una nueva configuración. Creo que DEBUG es un buen valor por defecto, ya que supone que no quieres realizar un seguimiento de los hits durante la depuración / desarrollo.
Cree una configuración con su clave de Google Analytics:
GOOGLE_ANALYTICS_KEY = "UA-1234567-8"
Cree una plantilla llamada: "analytics / analytics.html" que incluya 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>
Finalmente, 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.
Otra forma sencilla. En settings.py
, Verifique que la debug
es True
, luego agregue:
INTERNAL_IPS = (
''127.0.0.1'',
''localhost'',
)
Entonces puedes usar cosas en tu plantilla como esta:
{% if not debug %}
<script> blah blah </script>
{% endif %}
Si desea cambiar a producción, configure la debug
en False
.
Primero, cree una forma para que sus servidores de desarrollo y producción obtengan configuraciones de diferentes archivos, por ejemplo, dev.py y prod.py. Hay muchas formas de hacer esto.
Luego, crea una configuración, GOOGLE_ANALYTICS_KEY
. En dev.py configúralo a la cadena vacía. En prod.py, ajústelo a su clave, algo como "UA-124465-1". Cree un procesador de contexto para agregar esta configuración a todos los contextos de su plantilla, ya sea como GOOGLE_ANALYTICS_KEY
, o simplemente continúe y agregue su módulo de configuración. Luego, en su plantilla, utilícela para incluir condicionalmente su código de análisis:
{% if settings.GOOGLE_ANALYTICS_KEY %}
<script> blah blah {{settings.GOOGLE_ANALYTICS_KEY}} blah blah </script>
{% endif %}
Tiene procesadores de contexto de plantilla que se pueden usar para pasar valores a todas las plantillas sin actualizar todas sus vistas.
http://docs.djangoproject.com/en/dev/ref/settings/#template-context-processors
Todas estas otras soluciones pueden funcionar, pero todas son excesivas ahora porque puede configurar fácilmente un filtro en Google Analytics para filtrar todo el tráfico que no proviene de su sitio web de producción o sitios web. Consulte Crear / Administrar filtros de perfil en la Ayuda de GA. Una solución sin código simplemente facilita la vida de todos.
Nota : hay dos advertencias.
- esto no funciona con el filtrado en tiempo real, porque no se aplican filtros en tiempo real (a partir de julio de 2012 - verifique sus documentos)
- tienes que ser un administrador con la cuenta de Google Analytics para configurar esto
Un poco tarde para la fiesta, pero hay una aplicación de Django reutilizable llamada django-google-analytics . La forma más fácil de usarlo es:
- Agregue la aplicación
google_analytics
a su secciónINSTALLED_APPS
de susettings.py
. - En su plantilla base, generalmente una
base.html
, inserte esta etiqueta en la parte superior:{% load analytics %}
- En la misma plantilla, inserte el siguiente código justo antes de la etiqueta del cuerpo de cierre:
{% analytics "UA-xxxxxx-x" %}
elUA-xxxxxx-x
es un código único de Google Analytics para su dominio.