我的解决方案采用与 Ned 的首选答案类似的方法,但将分析代码分离到自己的模板中。我更喜欢这个,所以我可以将模板从一个项目复制到另一个项目。
这是我的 context_processor 文件中的一个片段:
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 Key 创建设置:
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 时才会包含您的分析代码。否则,将不包含任何内容。