とりあえずメモとして。
やりたきことはdjangoで作ったwebサイトにトラッキングコードをいい感じに埋めたかったんです。
GAへのプロパティ追加とかはすでに済んでいる前提です。
やること
独自のcontext_processorsとやらを作成する
app名/context_processors.py
というファイルを新しく作り
from django.conf import settings
def google_analytics(request):
"""
DEBUG=Falseの場合に、GoogleアナリティクスのトラッキングIDを返す
"""
# GoogleアナリティクスのトラッキングIDをsettings.pyから取得する
# settings.py内に、GOOGLE_ANALYTICS_TRACKING_ID='自分のトラッキングID'を書き込んでおく
ga_tracking_id = getattr(settings, 'GOOGLE_ANALYTICS_TRACKING_ID', False)
# DEBUG=FalseかつGoogleアナリティクスのトラッキングIDを取得できたら、
# テンプレート内で'GOOGLE_ANALYTICS_TRACKING_ID'という変数を利用できるようにする
if not settings.DEBUG and ga_tracking_id:
return {
'GOOGLE_ANALYTICS_TRACKING_ID': ga_tracking_id,
}
return {}
これをそのまま貼り付けます。
作っただけだとなんにもならないので、
settings.pyを編集し、↑を読み込ませてあげます。
TEMPLATESの変数があると思うので、
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], # 404ページ用に記載
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'app名.context_processors.google_analytics', ←を追加
],
},
},
]
上記のような感じで一行追加します。
更に、
どこでもいいので、settings.pyのなかのどこかに、
GOOGLE_ANALYTICS_TRACKING_ID = 'トラッキングID'
を追記します。
こうするとdjangoアプリが起動したタイミングで、
context_processors.py
が読み込まれて、テンプレートの中で、
{{ GOOGLE_ANALYTICS_TRACKING_ID }}
という感じで変数を呼び出せるんじゃないかって推測してます。
templateでgaのトラッキングコードを呼び出す。
base.html
が置かれているディレクトリに新しく、
ga.html
というファイルを作成し、
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=トラッキングコード"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'トラッキングコード');
</script>
GAの画面で出力されたjsをそのまま貼っつけます。
もちろんこれだけだと読み込まれないので、base.htmlのheadタグの中に、
{% if GOOGLE_ANALYTICS_TRACKING_ID %}
{% include 'app名/ga.html' %}
{% endif %}
を追記します。
場合によっては、
{% include 'ga.html' %}
でいけちゃうかもです。そこらへんはよしなに。
これで、DEBUGモードじゃないかつ、settings.pyにGOOGLE_ANALYTICS_TRACKING_IDが設定されている場合にのみ、
トラッキングコードがwebページに埋め込まれます。
以上です。
はじめは、
https://www.djangobrothers.com/blogs/django_google_analytics/
を参考にしたのですが、
context_processors.google_analytics
をsettings.pyに追記しろと書かれておらず、
[django context_processors]
でぐぐったらどっかのqiitaの記事が引っかかってどうにか設定できました。
なんか回りくどいことしてるような気がしないでもですが、
context_processors
について色々学べたので良しとしましょう。