Django仅在生产中包含谷歌分析代码,但在开发中不包括

时间:2015-02-09 09:18:40

标签: django django-templates

我将谷歌分析代码放在一个单独的模板中,所以我可以在任何地方都包含它。

由于我不希望代码显示在开发中,我只是将其包装在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",
)

我在生产中将DEBUGTEMPLATE_DEBUG设置为False

我错过了什么?

1 个答案:

答案 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中),但不在开发服务器上。这样它应该按预期工作。