python - django:找不到运行服务器静态文件
问题描述
我读过一些关于类似主题的帖子,但没有一个是完全相同的。
我有一个 django 应用程序(django 2.2.2,python 3.6.12)在使用 uwsgi(连同 nginx)服务时没有问题,但是在使用 runserver 服务时查找静态文件有问题(python manage.py runserver 0 :8000) 错误消息如下:
WARNING Not Found: /static/admin/css/base.css
WARNING Not Found: /static/stylesheets/css/style.css
WARNING Not Found: /static/admin/js/core.js
这些警告是由访问网页中的行引起的,如下所示。
<link rel="stylesheet" type="text/css" href="/static/admin/css/base.css">
<script type="text/javascript" src="/static/admin/js/core.js"></script>
当然,由于无法访问静态文件,网页无法正确显示。
我有以下设置:
BASE_PATH = '/data/webapps/myapp'
STATIC_ROOT = os.path.join(BASE_PATH, '_site/static')
在 BASE_PATH 中,我有如下文件夹,其中包含系统抱怨找不到的所有文件:
_site/static/admin/css
_site/static/admin/js
_site/static/stylesheets/css
我什至直接在 BASE_PATH 下复制了 _site 下的所有文件夹,如下所示,但没有任何效果。
static/admin/css
static/admin/js
static/stylesheets/css
在这里我想强调的是,当使用以下命令与 uwsgi 一起使用时,它可以正常工作:
uwsgi --ini uwsgi.ini
并且 uwsgi.ini 包含以下几行:
[uwsgi]
chdir = %d
enable-threads = true
max-requests = 5000
file = /data/webapps/myapp/myapp/conf/wsgi.py
socket = uwsgi.sock
chmod = 666
chmod-socket = 666
uid = myapp
gid = myapp
和 wsgi.py 有以下代码:
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mybic.conf.settings')
application = get_wsgi_application()
任何帮助表示赞赏。
附言
findstatic 命令也找不到这些文件。例如,以下命令找不到匹配项。
python manage.py findstatic --verbosity=2 core.js
为静态文件添加一个包含所有文件夹路径的向量 STATICFILES_DIRS ,如下所示,只会帮助 findstatic 命令而不是 runserver 命令,也就是说,仍然存在访问网页的警告。
STATICFILES_DIRS = [
os.path.join(BASE_PATH, '_site/static/stylesheets/css'),
os.path.join(BASE_PATH, '_site/static/stylesheets/js'),
os.path.join(BASE_PATH, '_site/static/admin/css'),
os.path.join(BASE_PATH, '_site/static/admin/js'),
...
]
解决方案
改变DEBUG = TRUE
。如果它只是按照这篇文章解决问题的工作。
保留DEBUG = False
,因为许多安全原因。
安装pip install whitenoise
(当前版本为 5.2.0)
在你的settings.py
:
- 添加
'whitenoise.middleware.WhiteNoiseMiddleware',
到MIDDLEWARE
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware', # Add WhiteNoise here
...
]
- 在下面添加
STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'
您的STATIC_ROOT
if DEBUG:
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
...
else:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'
- 在包含
manage.py
运行的文件夹中python manage.py collectstatic
(对于 Django 管理站点的静态文件)
推荐阅读
- c++ - 找到包含特定边的最短循环
- macos - 当没有 Window 系统菜单时,Command-M 是否应该最小化?
- c++ - 重新哈希的 C++ 哈希表问题
- prolog - swi prolog:连接和切割
- ruby - 如何使用 Rspec 存根 method_options?
- ios - 如何在对象实例上快速使用选择器
- r - R - if (order[7] > 1 & sum(order[4:6]) > 0) 结果 <- paste(result, : 参数长度为零)
- php - 运行 phpmyadmin 时出现奇怪的错误
- mapkit - iOS12 Beta MapKit 问题:在 didSelect 方法中更改注释标题
- c# - 使用 MailKit 检查 imap 文件夹是否存在