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'

Источник: /questions/38122506/komanda-collectstatic-zavershaetsya-neudachno-esli-vklyuchen-whitenoise/38122532#38122532

Проблема в том, что где-то в ваших шаблонах вы ссылаетесь на статический файл, который не существует. В частности, вы передаете пустую строку в 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
Другие вопросы по тегам