Giải pháp của tôi có cách tiếp cận tương tự với câu trả lời ưa thích của Ned, nhưng tách mã phân tích thành mẫu riêng của nó. Tôi thích điều này, vì vậy tôi chỉ có thể sao chép các mẫu từ dự án đến dự án.
Dưới đây là một đoạn trích từ tập tin context_processor tôi:
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': "" }
Tất nhiên bạn sẽ cần phải nói cho Django để bao gồm này trong ngữ cảnh của bạn. Trong cài đặt của bạn.tập tin py, bao gồm:
TEMPLATE_CONTEXT_PROCESSORS = (
...
"context_processors.analytics",
)
tôi đã thiết lập nó để bao gồm các mã phân tích chỉ khi DEBUG được thiết lập để False, nhưng bạn có thể thích để chìa khóa nó đi một cái gì đó khác, có lẽ một môi trường mới hoàn toàn. Tôi nghĩ rằng DEBUG là một mặc định tốt vì nó giả sử bạn không muốn theo dõi bất kỳ lượt truy cập nào trong khi gỡ lỗi/phát triển.
Tạo một cài đặt với Key Google Analytics của bạn:
GOOGLE_ANALYTICS_KEY = "UA-1234567-8"
Tạo một mẫu gọi là: "phân tích/analytics.html" trong đó bao gồm một cái gì đó như thế này:
<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>
Cuối cùng, ngay trước khi đóng thẻ trong mẫu base.html của bạn, thêm thẻ này:
{{ analytics_code }}
Bây giờ mã phân tích của bạn sẽ chỉ được bao gồm khi DEBUG = False. Nếu không, không có gì sẽ được bao gồm.
Cảm ơn Ned, tôi hy vọng đây sẽ là con đường để đi. :) –