使用Django部署Google Analytics

39
我们即将部署一个新的Django网站,并希望使用Google Analytics跟踪网站上的流量。但是,我们不希望所有开发实例的访问都对Google Analytics统计产生贡献。
我们有几种处理方式:
  • 在settings.py中设置一个配置选项,基本模板将使用此选项来决定是否包含适当的
10个回答

54

首先,创建一个方法,使您的开发和生产服务器从不同的文件(如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 %}

1
谢谢Ned,我就知道这是正确的方法。 :) - Daniel Watkins
如果 {% if settings.GOOGLE_ANALYTICS_KEY %} 和 {{settings.GOOGLE_ANALYTICS_KEY}} 对您无效,请直接在视图中使用 {% if GOOGLE_ANALYTICS_KEY %} 和 {{GOOGLE_ANALYTICS_KEY}}(不需要添加“settings.”前缀),因为上下文处理器返回的自定义字典可以直接访问。 - a learner has no name
我在views.py中添加的自定义上下文处理器如下所示: def google_analytics_key(request): return {'GOOGLE_ANALYTICS_KEY': settings.GOOGLE_ANALYTICS_KEY} 我还将'menuanalyser.views.google_analytics_key'添加到settings.py中的'context_processors'中,以及自定义设置GOOGLE_ANALYTICS_KEY ='[your_key]'。 - a learner has no name

15

虽然有点晚了,但是有一个可以重复使用的Django应用叫做django-google-analytics。最简单的使用方法是:

  1. google_analytics应用添加到settings.py文件中的INSTALLED_APPS部分。
  2. 在您的基础模板中(通常是base.html),在顶部插入此标记:{% load analytics %}
  3. 在同一模板中,在闭合的标签之前插入以下代码:{% analytics "UA-xxxxxx-x" %},其中UA-xxxxxx-x是您域名的唯一Google Analytics代码。

我找到了一个类似的网站,但有两个步骤我不是很理解。第三步是否只需将代码粘贴到urls.py中,就像它原本的样子,还是需要放在其他地方?第四步是否要粘贴到settings.py中?这是链接:https://pypi.org/project/django-google-analytics-app/ - Joehat

9

我的解决方案与Ned的首选答案类似,但将分析代码分离到自己的模板中。我更喜欢这种方法,这样我可以将模板从一个项目复制到另一个项目。

以下是我的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
所有其他解决方案都可能可行,但现在它们都过度了,因为您可以轻松地在Google Analytics中设置过滤器,以过滤掉所有非来自您的生产网站或网站的流量。请参阅GA帮助中的创建/管理配置文件过滤器。无需代码就能解决问题,让每个人的生活更轻松。
注意:有两个注意事项:
1. 实时过滤不起作用,因为实时没有应用任何过滤器(截至2012年7月-请查看其文档); 2. 您必须是Google Analytics账户的管理员才能设置此功能。

4
另一种简单的方法是,在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


2

我大部分同意Ned的观点,不过我有一个名为IS_LIVE_SITE的单一设置,可切换分析代码、广告和其他一些内容。这样我就可以将所有密钥保存在Subversion中(因为查找它们很麻烦),并且仍然可以轻松地切换它们的开关。


2

不要直接在你的html中包含脚本标签,只需更改分析javascript代码,使其仅在href不包含你的生产站点名称时运行。这将在没有任何额外配置的情况下工作。


非常简单的解决方案。这里有一个例子。 - J0ANMM

1

大家好,这是一篇比较老的帖子.. 但是我花了一些时间搜索一些仍在积极维护的可重用应用程序,我想分享一下我发现的:

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

这个项目仍在积极维护,不需要将ID添加到数据库中 (如果每个站点都有一个项目,则更好),因此无论环境是开发还是生产,它都会出现在代码中。

1

0

这是我用简单的方式解决它的方法:

如果您还没有,请在项目中创建一个名为“utils”的应用程序。请参考这些说明

但是,按照以下方法来包括所有全局上下文处理器以及项目设置。这似乎是更好的实践方法。这里是说明

因此,在创建“utils”应用程序后,在/utils中创建一个名为context_processors.py的文件,该文件看起来像这样:

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

)

希望这可以帮助到你!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接