我们有几种处理方式:
- 在settings.py中设置一个配置选项,基本模板将使用此选项来决定是否包含适当的
首先,创建一个方法,使您的开发和生产服务器从不同的文件(如dev.py和prod.py)中选择设置。有很多方法可以做到这一点。
然后,创建一个设置项GOOGLE_ANALYTICS_KEY
。在dev.py中将其设置为空字符串,在prod.py中将其设置为您的密钥,例如"UA-124465-1"。创建一个上下文处理器,将此设置添加到所有模板上下文中,可以作为GOOGLE_ANALYTICS_KEY
,或直接添加您的设置模块。然后,在模板中使用它来有条件地包含您的分析代码:
{% if settings.GOOGLE_ANALYTICS_KEY %}
<script> blah blah {{settings.GOOGLE_ANALYTICS_KEY}} blah blah </script>
{% endif %}
虽然有点晚了,但是有一个可以重复使用的Django应用叫做django-google-analytics。最简单的使用方法是:
google_analytics
应用添加到settings.py
文件中的INSTALLED_APPS
部分。base.html
),在顶部插入此标记:{% load analytics %}
{% analytics "UA-xxxxxx-x" %}
,其中UA-xxxxxx-x
是您域名的唯一Google Analytics代码。我的解决方案与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': "" }
TEMPLATE_CONTEXT_PROCESSORS = (
...
"context_processors.analytics",
)
我已经设置好了当DEBUG为False时才包含分析代码,但你可能更喜欢基于其他条件,比如一个全新的设置。我认为DEBUG是一个很好的默认设置,因为它假设您在调试/开发时不想跟踪任何点击。
创建一个带有您的Google Analytics密钥的设置:
GOOGLE_ANALYTICS_KEY = "UA-1234567-8"
<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 }}
settings.py
中检查debug
是否为True
,然后添加:INTERNAL_IPS = (
'127.0.0.1',
'localhost',
)
{% if not debug %}
<script> blah blah </script>
{% endif %}
如果想要切换到生产环境,需要将debug
设置为False
。
我大部分同意Ned的观点,不过我有一个名为IS_LIVE_SITE的单一设置,可切换分析代码、广告和其他一些内容。这样我就可以将所有密钥保存在Subversion中(因为查找它们很麻烦),并且仍然可以轻松地切换它们的开关。
不要直接在你的html中包含脚本标签,只需更改分析javascript代码,使其仅在href不包含你的生产站点名称时运行。这将在没有任何额外配置的情况下工作。
大家好,这是一篇比较老的帖子.. 但是我花了一些时间搜索一些仍在积极维护的可重用应用程序,我想分享一下我发现的:
这个项目仍在积极维护,不需要将ID添加到数据库中 (如果每个站点都有一个项目,则更好),因此无论环境是开发还是生产,它都会出现在代码中。您可以使用模板上下文处理器将值传递给所有模板,而无需更新所有视图。
http://docs.djangoproject.com/en/dev/ref/settings/#template-context-processors
这是我用简单的方式解决它的方法:
如果您还没有,请在项目中创建一个名为“utils”的应用程序。请参考这些说明。
但是,按照以下方法来包括所有全局上下文处理器以及项目设置。这似乎是更好的实践方法。这里是说明。
因此,在创建“utils”应用程序后,在/utils中创建一个名为context_processors.py的文件,该文件看起来像这样:
from django.conf import settings
def googleanalytics(request):
return {
'google_tracking_id' : settings.GOOGLE_TRACKING_ID,
}
import django.conf.global_settings as DEFAULT_SETTINGS
TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_SETTINGS.TEMPLATE_CONTEXT_PROCESSORS + (
'utils.context_processors.googleanalytics',
)
希望这可以帮助到你!