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.

Как исправить

  1. Сначала убедитесь, что вы используете последнюю версию файла, попробуйте обновить свой django_minify_html командой pip install -обновить django-minify-html.
  2. Оберните код <!-- !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 -->
  1. Также можно попробовать "дословно", если проблема осталась:
{% 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 %}

Протестируйте каждое решение, чтобы увидеть, какое из них устраняет проблему.

Вернуться на верх