38

我们即将部署一个新的 Django 网站,我们希望使用 Google Analytics 来跟踪网站上的流量。但是,我们不希望开发实例上的所有点击都有助于 Google Analytics 统计。

我们有几种方法可以解决这个问题:

  • 在 settings.py 中有一个配置选项,基本模板使用它来决定是否包含适当的<script>元素,
  • 在部署到生产服务器之前维护一个我们拉入的分支,我们确保它包括<script>元素,
  • 使用 Google Analytics 阻止对 127.0.0.1 或 localhost 的点击,或者
  • 别的东西。

第一个选项似乎是最明智的,但我不确定是否是。例如,我们是否必须开始将一个google_analytics变量传递给我们所有的视图?

你怎么认为?

4

10 回答 10

53

首先,创建一种让您的开发和生产服务器从不同文件(例如 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 %}
于 2009-03-10T11:17:08.330 回答
15

聚会有点晚了,但有一个可重用的 Django 应用程序,名为django-google-analytics。最简单的使用方法是:

  1. google_analytics应用程序添加到您INSTALLED_APPSsettings.py.
  2. 在您的基本模板中,通常是 a base.html,在最顶部插入此标签:{% load analytics %}
  3. 在同一模板中,在结束正文标记之前插入以下代码:{% analytics "UA-xxxxxx-x" %}UA-xxxxxx-x是您的域的唯一 Google Analytics(分析)代码。
于 2009-10-13T12:45:30.047 回答
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 Key 创建设置:

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 时才会包含您的分析代码。否则,将不包含任何内容。

于 2009-09-16T16:12:53.713 回答
5

所有这些其他解决方案可能都有效,但现在它们都过大了,因为您可以轻松地在 Google Analytics 中设置过滤器来过滤掉所有不是来自您的生产网站或网站的流量。请参阅GA 帮助中的创建/管理配置文件过滤器。没有代码的解决方案只会让每个人的生活更轻松。

注意:有两个警告

  1. 这不适用于实时过滤,因为没有过滤器应用于实时(截至 2012 年 7 月——检查他们的文档)
  2. 您必须是拥有 Google Analytics(分析)帐户的管理员才能进行设置
于 2012-07-09T17:49:45.653 回答
4

另一种简单的方法。在settings.py中,勾选debugTrue,然后添加:

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

然后你可以在你的模板中使用这样的东西:

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

如果要更改为生产,请设置debugFalse

参考: http: //www.djangobook.com/en/2.0/chapter09.html

于 2013-12-22T14:36:12.640 回答
2

我基本同意 Ned,尽管我有一个名为 IS_LIVE_SITE 的设置,它可以切换分析代码、广告和其他一些东西。通过这种方式,我可以将所有键保持在颠覆状态(因为查找它们很痛苦)并且仍然可以轻松地打开或关闭它们。

于 2009-03-10T12:19:36.837 回答
2

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

于 2009-03-11T01:48:06.363 回答
1

您有模板上下文处理器,可用于将值传递给所有模板,而无需更新所有视图。

http://docs.djangoproject.com/en/dev/ref/settings/#template-context-processors

于 2009-03-10T11:18:58.417 回答
1

大家好,这是一篇很老的帖子。但是由于我花了一些时间搜索一些仍在积极维护的可重用应用程序,所以我想分享我发现的内容:

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

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

于 2017-03-25T22:16:43.070 回答
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',

)

希望这可以帮助!

于 2013-04-20T01:51:04.173 回答