使用 Django 部署 Google Analytics
-
08-07-2019 - |
题
我们即将部署一个新的 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 谷歌分析. 。最简单的使用方法是:
- 添加
google_analytics
申请到你的INSTALLED_APPS
你的部分settings.py
. - 在您的基本模板中,通常是
base.html
, ,在最顶部插入此标签:{% load analytics %}
- 在同一模板中,在结束正文标记之前插入以下代码:
{% 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 帮助中的过滤器。没有代码的解决方案只会让每个人的生活更轻松。
笔记: :有两个注意事项
- 这不适用于实时过滤,因为没有过滤器应用于实时(截至 2012 年 7 月 - 检查他们的文档)
- 您必须是拥有 Google Analytics 帐户的管理员才能进行设置
另一种简单的方法。在 settings.py
,查看 debug
是 True
, , 然后加:
INTERNAL_IPS = (
'127.0.0.1',
'localhost',
)
然后您可以在模板中使用如下内容:
{% if not debug %}
<script> blah blah </script>
{% endif %}
如果想转为生产,设置 debug
到 False
.
我基本上同意 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 添加到数据库中(我认为每个站点有一个项目会更好),因此无论环境是开发还是生产,它都会在代码中裸露。