Django-minify-html нарушает внедрение Google Analytics
Я столкнулся с проблемой и был бы признателен за несколько советов. У меня есть производственное приложение Django, в которое я включил Google Analytics с помощью контекстного процессора и условно отрисовал его в своем base.html шаблон, подобный этому:
<!-- Google Analytics -->
{% if GOOGLE_ANALYTICS_ID %}
<script async src="https://www.googletagmanager.com/gtag/js?id={{ GOOGLE_ANALYTICS_ID }}"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', '{{ GOOGLE_ANALYTICS_ID }}');
</script>
{% endif %}
<!-- End Google Analytics -->
Все работало нормально, но отслеживание GA полностью прерывается после включения django_minify_html
Это мои текущие настройки:
Для base.py:
USE_MINIFICATION = DJANGO_ENV == "production"
MINIFY_HTML = {
"enabled": USE_MINIFICATION,
"remove_comments": True,
"minify_js": False,
"minify_css": True,
}
Для production.py
from .base import MIDDLEWARE as BASE_MIDDLEWARE
MIDDLEWARE = list(BASE_MIDDLEWARE)
# Insert MinifyHtmlMiddleware after WhiteNoiseMiddleware
try:
whitenoise_index = MIDDLEWARE.index("whitenoise.middleware.WhiteNoiseMiddleware")
MIDDLEWARE.insert(whitenoise_index + 1, "django_minify_html.middleware.MinifyHtmlMiddleware")
except ValueError:
try:
security_index = MIDDLEWARE.index("django.middleware.security.SecurityMiddleware")
MIDDLEWARE.insert(security_index + 1, "django_minify_html.middleware.MinifyHtmlMiddleware")
except ValueError:
MIDDLEWARE.insert(0, "django_minify_html.middleware.MinifyHtmlMiddleware")
Кто-нибудь сталкивался с этим раньше? Я уменьшил значение параметра False в надежде исключить сценарий GA, но продолжаю получать сообщение об ошибке консоли.
Хотелось бы услышать какие-либо советы или обходные пути, как наилучшим образом исключить код отслеживания GA из процесса сжатия/минимизации.
Спасибо!
Корень проблемы
Проблема в том, что django_minify_html минимизирует ваш HTML-код, включая JavaScript-код Google analytics, даже если задано значение minify_js=False.
Как исправить
- Сначала убедитесь, что вы используете последнюю версию файла, попробуйте обновить свой django_minify_html командой pip install -обновить django-minify-html.
- Оберните код
<!-- !minify-html-preserve -->вместо<!-- Google Analytics -->это подскажет django пропускать код между строками, вот как это сделать:
<!-- !minify-html-preserve -->
{% if GOOGLE_ANALYTICS_ID %}
<script async src="https://www.googletagmanager.com/gtag/js?id={{ GOOGLE_ANALYTICS_ID }}"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', '{{ GOOGLE_ANALYTICS_ID }}');
</script>
{% endif %}
<!-- !minify-html-preserve-end -->
- Также можно попробовать "дословно", если проблема осталась:
{% if GOOGLE_ANALYTICS_ID %}
<script async src="https://www.googletagmanager.com/gtag/js?id={{ GOOGLE_ANALYTICS_ID }}"></script>
<script>
{% verbatim %}
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', '{{ GOOGLE_ANALYTICS_ID }}');
{% endverbatim %}
</script>
{% endif %}
Протестируйте каждое решение, чтобы увидеть, какое из них устраняет проблему.