Django не загружает статические файлы ValueError("Отсутствует запись манифеста статических файлов для"%s "" % clean_name)
Мое первое приложение в Django, и я пытаюсь подготовить свое приложение Django (2.0) к работе, но я не могу правильно загрузить статические файлы с помощью WhiteNoise
У меня все время появляется следующая ошибка в моем журнале
ValueError("Missing staticfiles manifest entry for '%s'" % clean_name)
ValueError: Missing staticfiles manifest entry for 'css/inicio.css'
[02/Jun/2018 14:40:37] ERROR [django.server:124] "GET /participation/prueba HTTP/1.1" 500 27
У меня есть следующие settings.py
...
DEBUG=False
DJANGO_APPS = ['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
#Delete for development whitenoise.runserver_nostatic
'whitenoise.runserver_nostatic',
'django.contrib.staticfiles',
'django.contrib.sites'
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
...
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles/')
STATICFILES_DIRS = (
(os.path.join(BASE_DIR, 'static')),
)
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
У меня все мои статические файлы в папке называются static на корневом уровне, когда я запускаю manage.py collectstatic, я генерирую все статические файлы в директории staticfiles, но все равно мне не удается заставить его работать.
Я пытаюсь изолировать проблему, и я использую следующий шаблон
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{% load static %}
<link rel="stylesheet" href="{% static "css/inicio.css" %}">
</head>
<body>
{% for categoria in categoria_list %}
<p>
{{ categoria.titulo }}
</p>
{% endfor %}
</body>
</html>
Я уже пытался изменить путь HREF на
{% static "/css/inicio.css" %}
{% static "static/css/inicio.css" %}
но никто из них не сделал это загрузить
Также я пробовал с и без 'whitenoise.runserver_nostatic', загруженного в Django Apps, и я продолжаю получать те же результаты.
Кто-нибудь знает, что я делаю не так?
Заранее спасибо.
4 ответа
Попробуйте удалить эту строку,
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Проблема в том, что где-то в ваших шаблонах вы ссылаетесь на статический файл, который не существует. В частности, вы передаете пустую строку в static. Возможно, у вас есть строка типа {% static some_variable %}, где some_variable не определена?
В Django 1.11 поведение изменилось так, что ошибки появляются на отсутствующих файлах. См.: https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/
Если вы исправите эту ссылку, то все должно работать.
Ниже ТАК вопрос стоит прочитать. ValueError в / Отсутствует запись манифеста статических файлов для ''
Этот ответ скопирован из /questions/6266335/valueerror-v-otsutstvuet-zapis-manifesta-staticheskih-fajlov-dlya/6266343#6266343. ком / а / 49656053/3001007
Также здесь есть сложный ответ. Модель Django: ValueError: отсутствует запись манифеста статических файлов для "file_name.ext"
Если вы используете Docker на Heroku, это правильное решение (вместо полного удаления сжатия). Ошибка возникает просто потому, чтоSTATIC_ROOT
не создается во время развертывания (в отличие от обычного стека Python/Django). Также вы должны обязательно запуститьcollectstatic
на всех динамометрических станциях, которые могут в конечном итоге обслуживать статические файлы.
Я исправил это, встроив все в базовый образ Docker. В вашем Dockerfile (при условии, что вашSTATIC_ROOT
является /app/static
):
[...]
RUN mkdir -p /app/static
RUN python manage.py collectstatic --no-input
[...]
Это соберет все статические файлы и создаст файл манифеста, используемый Whitenoise для сопоставления обычных имен файлов (например,css/inicio.css
) в хешированные имена файлов (например, css/inicio.bf12af51cd.css
) (используется для кеширования).
Аналогично ответу Марко, если вы развертываете службу приложений Azure. Измените файл запуска на:
python manage.py migrate
python manage.py collectstatic
gunicorn --bind=0.0.0.0 --timeout 30 --max-requests 500 --max-requests-jitter 10 <appname>.wsgi