【问题标题】:Deploying Google Analytics With Django使用 Django 部署 Google Analytics
【发布时间】:2010-10-12 09:30:57
【问题描述】:

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

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

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

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

你有什么想法?

【问题讨论】:

    标签: python django deployment google-analytics


    【解决方案1】:

    首先,创建一种方法,让您的开发和生产服务器从不同的文件(例如 dev.py 和 prod.py)中提取设置。有很多方法可以做到这一点。

    然后,创建一个设置GOOGLE_ANALYTICS_KEY。在 dev.py 中将其设置为空字符串。在 prod.py 中,将其设置为您的密钥,例如“UA-124465-1”。创建一个context processor 以将此设置添加到您的所有模板上下文中,或者作为GOOGLE_ANALYTICS_KEY,或者直接添加您的设置模块。然后,在您的模板中,使用它有条件地包含您的分析代码:

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

    【讨论】:

    • 谢谢 Ned,我希望这会是正确的选择。 :)
    • {% if settings.GOOGLE_ANALYTICS_KEY %} 和 {{settings.GOOGLE_ANALYTICS_KEY}} 对我不起作用。只需在视图中使用 {% if GOOGLE_ANALYTICS_KEY %} 和 {{GOOGLE_ANALYTICS_KEY}}(不添加“设置”),因为可以直接访问上下文处理器返回的自定义字典。
    • 我放在views.py中的自定义上下文处理器看起来像这样: def google_analytics_key(request): return {'GOOGLE_ANALYTICS_KEY': settings.GOOGLE_ANALYTICS_KEY} 我添加了'menuanalysisr.views.google_analytics_key' settings.py 中的 'context_processors' 以及自定义设置 GOOGLE_ANALYTICS_KEY = '[your_key]'。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 非常简单的解决方案。 Here 一个例子。
        【解决方案5】:

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

        这是我的 context_processor 文件中的一个 sn-p:

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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

          • 我找到了一个与这些步骤类似的网站,但有两个我不完全理解。我会做一步。 3 只需将代码与 urls.py 中的代码完全相同,还是需要在其他内容中?步骤 4. 是否粘贴在 settings.py 中?这是链接:pypi.org/project/django-google-analytics-app
          【解决方案7】:

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

          注意:有两个注意事项

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

          【讨论】:

            【解决方案8】:

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

            如果您还没有,请在您的项目中创建一个名为“utils”的应用。见these directions

            但是,按照这种方法,除了项目设置之外,还包括所有全局上下文处理器。这似乎是一种更好的做法。这是instructions

            因此,在创建“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',
            

            )

            希望这会有所帮助!

            【讨论】:

              【解决方案9】:

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

              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

              【讨论】:

                【解决方案10】:

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

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

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2018-01-18
                  • 2013-07-16
                  • 2013-08-03
                  • 1970-01-01
                  • 2012-11-05
                  • 1970-01-01
                  • 2014-10-22
                  • 2017-12-24
                  相关资源
                  最近更新 更多