我将谷歌分析代码放在一个单独的模板中,所以我可以在任何地方都包含它。
由于我不希望代码显示在开发中,我只是将其包装在if
模板标签中:
... header of any template
{% include 'analytics.html' %}
</head>
.... rest of page
analytics.html的内容:
{% if not debug %}
<script>
... analytics code
</script>
{% endif %}
在开发过程中,它按预期工作,从不显示分析代码。
但是,在生产环境中,分析代码仅显示在主页中,而是隐藏在其他每个页面上。
以下是我的urls.py的摘录(我使用的是TemplateView):
url(r'^$', TemplateView.as_view(template_name="landing/home.html"), name='home'),
url(r'^prices/', TemplateView.as_view(template_name="landing/prices.html"), name='prices'),
url(r'^addons/', TemplateView.as_view(template_name="landing/addons.html"), name='addons'),
每个模板都有{% include 'analytics.html' %}
,(我没有将它们从公共基础扩展,因为它们的设计变化太大了。)
和我的模板上下文处理器:
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.core.context_processors.tz",
"django.contrib.messages.context_processors.messages",
"django.core.context_processors.request",
"allauth.account.context_processors.account",
"allauth.socialaccount.context_processors.socialaccount",
)
我在生产中将DEBUG
和TEMPLATE_DEBUG
设置为False
。
我错过了什么?
答案 0 :(得分:1)
我认为更好的方法是将您的Google Analytics(分析)属性ID放入settings.py中,并为其编写自定义上下文处理器。您可以将它包含在基本模板中(或者在每个基本模板中都包含在内),如下所示:
{% if G_A_PROPERTY_ID %}{% include 'analytics.html' %}{% endif %}
您的自定义上下文处理器:
# context_procossor.py
def google_analytics(request):
g_a_p_id = getattr(settings, 'G_A_PROPERTY_ID', False)
if g_a_p_id:
return {
'G_A_PROPERTY_ID': g_a_p_id,
}
return {}
不要忘记在settings.py中将自定义context_processor.py添加到TEMPLATE_CONTEXT_PROCESSORS。
在生产服务器上,在settings.py文件中设置G_A_PROPERTY_ID(如果使用,则设置在local_settings.py中),但不在开发服务器上。这样它应该按预期工作。