我试图了解Django如何使用我在Mac上使用Django 3,Gunicorn和Nginx创建的项目为静态文件提供服务。该网站正确提供了模板,但模板看不到我的CSS样式表。当我进入某个页面(例如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
上看到“未找到”页面。看来这应该是正确的链接,但是模板看不到我期望的main.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
我使用Homebrew安装了Nginx。这是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并使用DEBUG = True启动Django的开发服务器时,app1模板可以正确访问main.css文件。当我运行Gunicorn和Nginx时,看不到它。我意识到我并不需要在Mac上运行Gunicorn / Nginx,但我已经对其进行了设置,以便可以比较和对比Django在开发和生产中管理静态文件的方式。