找不到静态文件

Static Files not being found

提问人:TonWard 提问时间:10/5/2023 更新时间:10/5/2023 访问量:85

问:

我在向生产服务器提供静态文件时遇到了问题。在我的域中加载页面时,我不断收到“警告: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)

除此之外,我没有尝试太多,因为我不知道我还能做什么。

django apache django-staticfiles 静态文件

评论


答:

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)