Я пытаюсь понять, как stati c файлы обслуживаются Django, используя проект, который я создал на моей Ma c, используя Django 3, Gunicorn и Nginx. Веб-сайт обслуживает шаблоны правильно, за исключением того, что шаблоны не могут видеть мою таблицу стилей CSS. Когда я go на странице, например 127.0.0.1:8000/app1/
и просматриваю источник, я вижу это в моем шаблоне HTML:
<link rel="stylesheet" href="/static/css/main.css">
Если я нажимаю на ссылку href, я получаю страницу «Не найдено» по адресу http://127.0.0.1:8000/static/css/main.css
. Кажется, это должна быть правильная ссылка, но шаблон не может видеть основную таблицу стилей. css, как я и ожидал.
Вот соответствующие файлы в моем проекте mysite, расположенном в / Users / me / projects / django / django -staticfiles:
├── app1
│ ├── templates
│ │ └── app1
│ │ └── index.html
├── mysite
│ ├── settings.py
│ └── wsgi.py
├── static
│ └── css
│ └── main.css
├── static-final
│ ├── admin
│ │ ├── css
│ │ ├── fonts
│ │ ├── img
│ │ └── js
│ └── css
│ └── main.css
Вот соответствующие настройки:
# mysite/settings.py
...
DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', ]
...
INSTALLED_APPS = [
'django.contrib.staticfiles',
'app1',
]
...
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
STATIC_ROOT = os.path.join(BASE_DIR, 'static-final/')
...
Я установил Gunicorn в свою виртуальную среду и запустил его с помощью этой команды:
gunicorn --bind 0.0.0.0:8000 mysite.wsgi
Я установил Nginx, используя Homebrew. Вот часть nginx .conf, которая включает мои Nginx настройки:
# /usr/local/etc/nginx.conf
...
http {
...
server {
listen 8080;
server_name localhost;
}
...
include server/*;
}
Вот моя Nginx конфигурация:
# /usr/local/etc/nginx/servers/django-staticfiles
server {
listen 80;
server_name 127.0.0.1;
location / {
proxy_pass http://127.0.0.1:8000;
}
location /static/ {
alias /Users/me/projects/django/django-staticfiles/static-final;
}
}
Я должен добавить это, когда я остановите Gunicorn и запустите сервер разработки Django с DEBUG = True, шаблон app1 правильно обращается к основному файлу. css. Это просто не видно, когда я работаю с Gunicorn и Nginx. Я понимаю, что у меня нет реальной необходимости запускать Gunicorn / Nginx на моей Ma c, но я просто настроил его, чтобы я мог сравнить и сравнить, как Django управляет файлами stati c в развитие против производства.