繁体   English   中英

Django 在配置 STATIC_ROOT 时不提供 static 文件

[英]Django not serving static files while STATIC_ROOT configured

我有一个克隆项目,我需要使用 Django 本身来提供 static 文件。 这是我第一次以这种方式提供 static 文件(过去我使用 Nginx/Apache 来提供媒体和 static 文件)。 这是我在生产中通过 Django 本身提供 static 文件的尝试:

1-将 STATIC_URL 和 STATIC_ROOT 添加到 settings.py:

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

2-项目的目录树:

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

3-运行./manage.py collectstatic并且运行良好。 这是此命令之后的static/目录树(从过去的一些 static 文件存在于 static 目录中,因为此项目是 MVT 并加载模板):

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

4-让 Django 在生产中为 static 服务(在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模板如何引用 static 文件:

{% 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 logos/logo-6.png 存在的模板页面请求static/media/logos/logo-6.png (对 static 文件的所有请求都会引发 404 HTTP 状态代码)。 即使在DEBUG=True中,此配置也不起作用,我做错了什么? 先感谢您。

如文档所述,服务不应在生产中使用。 如果您不想使用 nginx 或 apache,请考虑使用whitenoise 您需要做的就是通过pip install whitenoise安装它并将这些行添加到中间件:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM