Django не обслуживает stati c файлы, пока настроено STATIC_ ROOT - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть клонированный проект, и мне нужно обслуживать файлы * stati c самим Django. Я впервые использую файлы stati c таким способом (в прошлом я использовал Nginx / Apache для обслуживания файлов мультимедиа и stati c). Вот моя попытка подать * * * * * * * * * * * * * * * * * * * * * * * * * * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '' '' * '*' '

...
STATIC_URL = '/static/'
STATIC_ROOT = os.environ.get('DH_STATIC_ROOT_DIR', os.path.join(BASE_DIR, 'static/'))

. Дерево каталогов проекта:

├── my_project
│   ├── DH
│   ├── env
│   ├── apps
│   ├── manage.py
│   ├── README.md
│   ├── requirements.txt
│   ├── static
│   └── templates

3 - работает ./manage.py collectstatic и работает хорошо. вот дерево каталога static/ после этой команды (из некоторого прошлого файла stati c существует в каталоге stati c, потому что этот проект является MVT и загружает шаблоны):

├── admin
├── css
├── fonts
├── js
├── media
└── plugins

4- let Django Служите stati c в производстве (в urls.py):

from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
    path('', index, name='index'),
    path('admin/', admin.site.urls)
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

5 - как html шаблоны ссылок на файлы stati c:

{% load static %}
...
<link href="{% static 'plugins/global/plugins.bundle.css' %}" rel="stylesheet" type="text/css" />

Например , в Chrome (осмотреть) я вижу запрос страницы шаблона к http://127.0.0.1:8000/static/media/logos/logo-6.png, что static/media/logos/logo-6.png существует (все запросы к файлам * * * * * * *) 404 кода статуса HTTP 404). с этой конфигурацией не работает даже в DEBUG=True что я делаю не так? Заранее спасибо.

1 Ответ

1 голос
/ 20 апреля 2020

В документации указано , не допускается использование в производстве. Если вы не хотите использовать nginx или apache, рассмотрите возможность использования whitenoise . Все, что вам нужно сделать, это установить его с помощью pip install whitenoise и добавить следующие строки в промежуточное ПО:

MIDDLEWARE = [
  'django.middleware.security.SecurityMiddleware',
  'whitenoise.middleware.WhiteNoiseMiddleware',
  # ...
]
...