AttributeError: модуль 'htmlmin.middleware' не имеет атрибута 'MarkRequestMiddleware'

Пытаясь развернуть мое Django приложение на платформе Heroku, включая htmlmin и gzip, приложение падает с кодом ошибки H10. При просмотре журнала похоже, что ошибка связана с

AttributeError: module 'htmlmin.middleware' has no attribute 'MarkRequestMiddleware'

Запуск локально работает идеально (я не знаю почему), но после развертывания на платформе Heroku приложение не работает.

Вот код settings.py:

MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",
    'django.middleware.gzip.GZipMiddleware',
    "htmlmin.middleware.HtmlMinifyMiddleware",
    "htmlmin.middleware.MarkRequestMiddleware",
    "whitenoise.middleware.WhiteNoiseMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.locale.LocaleMiddleware",  
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",    
    "django.contrib.auth.middleware.AuthenticationMiddleware",    
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware", 

]

...

HTML_MINIFY = True

Вот мой requirements.txt файл:

django
django_compressor
htmlmin
gunicorn
django-heroku
pip==21.0.1
numpy==1.19.1
wordcloud==1.8.1
requests==2.24.0
urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1
matplotlib==3.3.4
wikipedia-API==0.5.3
livereload>=2.6.1
whitenoise>=5.0

Вот журнал хвоста в приложении Heroku.

Вот журнал сборки

Есть предложения, как исправить эту ошибку?

Спасибо,

Я бы посоветовал ВСЕГДА пробовать использовать другие промежуточные программы после "django.contrib.sessions.middleware.SessionMiddleware",, так как иногда данные сессии загружаются заново и другие промежуточные программы не работают идеально.

попробуйте так>>>

MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",
     "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.locale.LocaleMiddleware",  
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",    
    "django.contrib.auth.middleware.AuthenticationMiddleware",    
    "django.contrib.messages.middleware.MessageMiddleware",
    'django.middleware.gzip.GZipMiddleware',
    "htmlmin.middleware.HtmlMinifyMiddleware",
    "htmlmin.middleware.MarkRequestMiddleware",
    "whitenoise.middleware.WhiteNoiseMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware", 

]

Возможно, это сработает. Если нет, то это всегда лучшая практика.

Вот решение, которое я нашел.

  1. Измените зависимость requirements.txt с htmlmin на django-htmlmin.
  2. Включите в settings.py from htmlmin.minify import html_minify в качестве ссылки. Причина этого основана на файле middleware.py из оригинальной библиотеки, чтобы гарантировать связь между классом HtmlMinifyMiddleware и MarkRequestMiddleware
  3. .

При развертывании в Heroku работает отлично.

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