Pergunta

Estamos prestes a implantar um novo site Django, e nós queremos usar o Google Analytics para acompanhar o tráfego no site. No entanto, não queremos que todos os acessos em casos de desenvolvimento para contribuir para as estatísticas do Google Analytics.

Existem algumas formas que poderíamos lidar com isto:

  • tem uma opção de configuração em settings.py que os usos modelo de base para decidir se deve ou não incluir os elementos <script> apropriado,
  • manter um ramo que puxar para antes de implantar no servidor de produção, o que podemos garantir inclui a elementos <script>,
  • fazer algo com o Google Analytics para acessos bloco para 127.0.0.1 ou localhost, ou
  • outra coisa.

A primeira opção parece ser o mais sensato, mas eu não tenho certeza se ele é. Por exemplo, teríamos de começar a passar uma variável google_analytics em todos os nossos pontos de vista?

Quais são seus pensamentos?

Foi útil?

Solução

Em primeiro lugar, criar uma maneira de ter os seus servidores de desenvolvimento e produção puxar configurações a partir de arquivos diferentes, dev.py dizer e prod.py. Há muitas maneiras de fazer isso.

Em seguida, crie uma definição, GOOGLE_ANALYTICS_KEY. Em dev.py configurá-lo para a cadeia vazia. Em prod.py, configurá-lo para sua chave, algo como "UA-124465-1". Criar um contexto do processador para adicionar esta definição para todos os seus contextos de modelo, quer como GOOGLE_ANALYTICS_KEY, ou simplesmente ir adiante e adicione seu módulo de configuração. Então, em seu modelo, usá-lo para incluir condicionalmente seu código de analytics:

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

Outras dicas

Um pouco atrasado para a festa, mas não há um aplicativo de Django reutilizável chamado django-google-analytics . A maneira mais fácil de usá-lo é:

  1. Adicione o aplicativo google_analytics à sua seção INSTALLED_APPS do seu settings.py.
  2. No modelo base, geralmente um base.html, inserir essa tag no topo: {% load analytics %}
  3. No mesmo modelo, inserção do seguinte direito código antes da tag body fechamento:. {% analytics "UA-xxxxxx-x" %} o UA-xxxxxx-x é um código único Google Analytics para seu domínio

A minha solução tem uma abordagem semelhante à resposta preferido de Ned, mas separa o código do Analytics em seu próprio modelo. Eu prefiro este, então eu posso simplesmente copiar o modelo de projeto para projeto.

Aqui está um trecho do meu arquivo 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': "" }

É claro que você vai precisar para dizer ao Django para incluir isso no seu contexto. Em no seu arquivo settings.py, incluem:

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

Eu tenho que configurar para incluir o código do Analytics apenas quando DEBUG é definido como False, mas você pode preferir digitar-lo outra coisa, talvez uma nova configuração completamente. Eu acho que DEBUG é um bom padrão, uma vez que supõe que você não deseja controlar todos os acessos durante a depuração / em desenvolvimento.

Criar um cenário com o seu Analytics Key Google:

GOOGLE_ANALYTICS_KEY = "UA-1234567-8"

Criar um modelo chamado: "analytics / analytics.html" que inclui algo como isto:

<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, pouco antes da tag de fechamento em seu modelo base.html, acrescentar o seguinte:

{{ analytics_code }}

Agora o seu código de análise será incluído somente quando DEBUG = False. Caso contrário, nada será incluído.

Todas estas outras soluções podem funcionar, mas todos eles são um exagero agora, porque você pode facilmente configurar um filtro no Google Analytics para filtrar todo o tráfego que não é proveniente de seu site produção ou websites. Consulte Criar / Gerenciar Perfil Filtros na Ajuda GA. Uma solução sem código apenas torna a vida de todos mais fácil.

Nota : há duas advertências

  1. Isto não funciona com a filtragem em tempo real, porque há filtros são aplicados em tempo real (a partir de julho de 2012 - verificar seus documentos)
  2. você tem que ser um administrador com o Google Analytics para configurá-lo

Outra forma simples. Em settings.py, check debug é True, em seguida, adicione:

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

Em seguida, você pode usar as coisas em seu modelo como este:

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

Se quiser alterar a produção, conjunto debug para False.

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

Eu, principalmente, de acordo com Ned, embora eu tenha uma única configuração chamada IS_LIVE_SITE que alterna código do Analytics, anúncios e algumas outras coisas. Dessa forma eu posso manter todas as chaves na subversão (pois é uma dor de procurá-los) e ainda alternar-los ligado ou desligado facilmente.

Em vez de incluir a tag script diretamente em seu html, basta alterar o javascript analytics por isso só funciona se o href não contém o nome do seu site prod. Isto irá funcionar sem qualquer configuração extra.

Você tem processadores contexto do template que podem ser usados ??para passar valores para todos os modelos sem atualizar todos os seus pontos de vista.

http://docs.djangoproject.com/ en / dev / ref / configurações / # template-context-processadores

Aqui é a maneira simples morta que eu resolver isso:

Criar um aplicativo em seu projeto chamado 'utils' se você não tiver já. Consulte essas direções .

No entanto, seguir esta abordagem para incluir todos os processadores contexto global em adição às configurações do projeto. É parece ser uma prática melhor. Aqui estão os instruções .

Assim, depois de criar seu aplicativo 'utils', crie um arquivo chamado context_processors.py em / utils parecida com esta:

from django.conf import settings

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

Em seu arquivo settings.py, acrescentar o seguinte:

import django.conf.global_settings as DEFAULT_SETTINGS

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

)

Espero que isso ajude!

Oi tudo é um post bastante antigo .. Mas desde que eu passei algum tempo na busca algum aplicativo reutilizável que ainda é mantido ativamente eu quero compartilhar o que eu encontrei:

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

Este projeto ainda é mantido ativamente e não requer o ID a ser adicionado ao banco de dados (eu acho que é melhor se você tiver um projeto por local), por isso é descoberta no código não importa se o ambiente é desenvolvimento ou produção .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top