提问人:TonWard 提问时间:10/5/2023 更新时间:10/5/2023 访问量:85
找不到静态文件
Static Files not being found
问:
我在向生产服务器提供静态文件时遇到了问题。在我的域中加载页面时,我不断收到“警告:django.request:未找到:/static/admin/css/base.css”以及终端中的其他静态文件。
以下是我在 settings.py 中的一些代码:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'django_extensions',
'sslserver',
'allauth',
'allauth.account',
'allauth.socialaccount',
'axes',
'rest_framework',
]
...
STATIC_URL = 'static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
这是我在 Apache 文件中的 httpd.conf 和 httpd-ssl.conf 中的代码。
Alias /static/ "C:/Users/MyUser/Desktop/MyProject/static/"
<Directory "C:/Users/MyUser/Desktop/MyProject/static">
Require all granted
</Directory>
在我的 httpd-ssl.conf 中:
Alias /static/ "C:/Users/MyUser/Desktop/MyProject/static/"
<Directory "C:/Users/MyUser/Desktop/MyProject/static">
Require all granted
</Directory>
<Directory "C:/Users/MyUser/Desktop/MyProject/">
Options Indexes FollowSymLinks
Require all granted
</Directory>
我有我的DEBUG = False
我也在 Windows VM 上使用 Apache 和 Waitress。我通过以下方式运行我的服务器: waitress-serve --listen=127.0.0.1:8000 MyProject.wsgi:application
这是我的项目目录:
MyProject/
├── manage.py
├── db.sqlite3
├── static/
│ └── ... (my static files)
├── staticfiles/
│ └── ... (collected static files)
└── MyProject2/
├── settings.py
├── urls.py
├── wsgi.py
└── __init__.py
这也是我的 wsgi.py:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'HaltScanner.settings')
if settings.DEBUG:
application = StaticFilesHandler(get_wsgi_application())
else:
application = get_wsgi_application()
# Add the HaltProject directory to PYTHONPATH
sys.path.append(r'C:\Users\MyUser\Desktop\MyProject')
# Debugging prints
print("PYTHONPATH:", sys.path)
print("sys.path:", sys.path)
print("os.environ:", os.environ)
print("Current Working Directory:", os.getcwd())
# Debugging print for settings
print(settings)
除此之外,我没有尝试太多,因为我不知道我还能做什么。
答:
1赞
apache
10/5/2023
#1
既然你有,Django 就不会处理静态文件了。
您可以尝试以下几种解决方案。DEBUG = False
在您的文件中,您可以添加另一个 urlpattern 来查找 url /static/* 下的静态文件:MyProject/MyProject2/urls.py
from django.views.static import serve
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
...,
url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT})
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
如果您遇到 anytype 的 mimetype 错误,就像我过去遇到的那样,您可以在文件中导入 mimetype:MyProject/MyProject2/settings.py
import mimetypes
mimetypes.add_type("text/css", ".css", True)
此外,如果您仍想在本地设置和提供静态文件以进行测试,则可以在不安全模式下运行服务器:DEBUG = False
python3 manage.py runserver --insecure
评论
0赞
TonWard
10/6/2023
谢谢!这解决了我的问题。另外,我想指出的是,对于那些使用 Django 4.0+ 的用户,应该使用“re_path”来代替行首的“url”:url(r'^static/(?P<path>.*)$', serve,{'document_root': 设置。STATIC_ROOT}) ] + static(settings.STATIC_URL,document_root=设置。STATIC_ROOT)
评论