我们即将部署一个新的 Django 网站,并且希望使用 Google Analytics 来跟踪该网站的流量。但是,我们不希望开发实例上的所有点击都贡献到 Google Analytics 统计数据中。

我们可以通过以下几种方法来处理这个问题:

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

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

你怎么看?

有帮助吗?

解决方案

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

其他提示

虽然有点晚了,但有一个可重用的 Django 应用程序,名为 Django 谷歌分析. 。最简单的使用方法是:

  1. 添加 google_analytics 申请到你的 INSTALLED_APPS 你的部分 settings.py.
  2. 在您的基本模板中,通常是 base.html, ,在最顶部插入此标签: {% load analytics %}
  3. 在同一模板中,在结束正文标记之前插入以下代码: {% analytics "UA-xxxxxx-x" %}UA-xxxxxx-x 是您的域的唯一 Google Analytics 代码。

我的解决方案采用与 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 时才会包含您的分析代码。否则,将不会包含任何内容。

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

笔记: :有两个注意事项

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

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

我基本上同意 Ned 的观点,尽管我有一个名为 IS_LIVE_SITE 的设置,它可以切换分析代码、广告和其他一些东西。这样我就可以将所有键保留在 subversion 中(因为查找它们很痛苦),并且仍然可以轻松地打开或关闭它们。

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

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

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

这是我解决这个问题的简单方法:

如果您还没有创建一个名为“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',

)

希望这可以帮助!

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top