Mezzanine Blogに Google Analytics タグ を組み込む


GooleAnalytics の仕込みは、ADMIN画面から実施できる

MEZZANINE ドキュメント には、Google Analytics との統合 と記載がされています。
簡単にできそうに思いましたので、やってみたところ簡単にできたので、記載しておきます。

  • mezzanineのsettings.pyに以下の記述を追加
    GOOGLE_ANALYTICS_ID= 'グーグルのANALYTICSID'
    

これで、blogにwebビーコンが埋め込まれます。 (めちゃめちゃ簡単でした。) wordpressとかでも当然、簡単にできるんでしょうね。きっと。

mezzanine/core/defaults.py 内に以下の記述があります。

register_setting(
    name="GOOGLE_ANALYTICS_ID",
    label=_("Google Analytics ID"),
    description=_("Google Analytics ID (http://www.google.com/analytics/)"),
    editable=True,
    default="",
)

editable=True
となっているため、管理画面上での設定が可能ですね..


Google タグマネージャ の 仕込み

Google タグマネージャ の 仕込み を実施しました。
こちらは、デフォルトでは用意されていないです。
django の plugin あるか調べたら、あるようですが、
最近のタグマネージャのタグの形式では、出力できないようなので、手動で組み込みを実施しました。

実施したこと

  • base.html に タグの組み込み
    各template の基底template の base.html に以下記述を追加しました。
    head タグ内には以下の記述を、

        {% compress js %}
            <!-- jQuery -->                                                                                                                   
            <script src="{% static "js/jquery.min.js" %}"></script>
            <!-- ここから追加 -->
            {% if settings.GOOGLE_TAG_MANAGER_ID and not request.user.is_staff %}
            <!-- Google Tag Manager -->
            <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
            new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
            j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
            'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
            })(window,document,'script','dataLayer','{{ settings.GOOGLE_TAG_MANAGER_ID }}');</script>
            <!-- End Google Tag Manager -->
            {% endif %}
            <!-- ここまで追加 -->
            {% block extra_js %}{% endblock %}
        {% endcompress %}
    
    そして、開始bodyタグの直下に以下を追加しました。
        <body id="{% block body_id %}body{% endblock %}">
        <!-- ここから追加 -->
        {% if settings.GOOGLE_TAG_MANAGER_ID and not request.user.is_staff %}
        <!-- Google Tag Manager (noscript) -->
        <noscript><iframe src="https://www.googletagmanager.com/ns.html?id={{ settings.GOOGLE_TAG_MANAGER_ID }}"
        height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
        <!-- End Google Tag Manager (noscript) -->
        {% endif %} 
        <!-- ここまで追加 -->
    

  • settings.py に、GOOGLE_TAG_MANAGER_ID を追加
    settings.py に、以下記述を追加します。

    # GOOGLE_TAG_MANAGER_ID     
    GOOGLE_TAG_MANAGER_ID='GTM-XXXXXXX'
    

  • defaults.py に GOOGLE_TAG_MANAGER_ID を追加
    template 内から使用できるようにするため、自アプリケーションのdefaults.pyがなければ、作成、
    あれば、編集して下期を追加します。

    # -*- coding: utf-8 -*-
    from mezzanine.conf import register_setting
    
    ###########################
    # FOR CLEAN_BLOG SETTINGS #
    ###########################
    register_setting(
        name="TEMPLATE_ACCESSIBLE_SETTINGS",
        default=("GOOGLE_TAG_MANAGER_ID",),
        append=True,
    )
    register_setting(
        name="GOOGLE_TAG_MANAGER_ID",
        description="Google tag manager id",
        editable=False,
        default="",
    )
    

  • 補足
    TEMPLATE_ACCESSIBLE_SETTINGS に追加したいフィールドをTaple で追加、そのあとに、追加定義値のデフォルト値を設定します。
    最初、記載の仕方を忘れて、編集途中で以下、innternal server error が発生しました。

    mod_wsgi (pid=13842): Target WSGI script 'wsgi.py' cannot be loaded as Python module.
    mod_wsgi (pid=13842): Exception occurred processing WSGI script 'wsgi.py'.
    Traceback (most recent call last):
      File "wsgi.py", line 22, in <module>
        application = get_wsgi_application()
      File "/usr/local/lib/python2.7/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application
        django.setup(set_prefix=False)
      File "/usr/local/lib/python2.7/site-packages/django/__init__.py", line 27, in setup
        apps.populate(settings.INSTALLED_APPS)
      File "/usr/local/lib/python2.7/site-packages/django/apps/registry.py", line 78, in populate
        raise RuntimeError("populate() isn't reentrant")
    RuntimeError: populate() isn't reentrant
    
    調べると、以下StackOverFlow の質問を見つけました。
    python - Unable to register setting with defaults.py in app, it will not override Mezzanine’s default setting - Stack Overflow

以上です。

コメント