注:该方法适用于 Django 项目、静态文件和上传文件在同一台设备中。如静态文件在专用服务器或使用CDN,请参考 https://docs.djangoproject.com/zh-hans/3.0/howto/static-files/deployment/
?静态文件和用户上传文件的相关配置本文不再赘述,直入主题吧。
?默认配置下,Django 会在 DEBUG=True
时通过 django.contrib.staticfiles
app 自动发现静态文件,用户上传文件则需要下面代码去实现自动配置。
from django.conf.urls.static import staticfrom django.conf import settingsurlpatterns = [ ...] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
?然而当 DEBUG=False
后再次访问项目时,会发现静态文件和用户上传文件(如用户头像)均报404错误。这是因为该方法对于 DEBUG=False
不适用。
?对于静态文件和用户上传文件的部署,Django 给了两种方案。
django.views.static.serve()
为静态文件和用户上传文件配置提供服务。但这种方法不安全。STATIC_URL
下为 STATIC_ROOT
目录下的文件提供静态文件服务,用户上传文件类似。官网推荐使用该方法。django = 2.2python = 3.7
django.views.static.serve()
为静态文件和上传文件配置服务settings.py
中配置静态文件和上传文件# settings.pyDEBUG = False# 静态文件STATIC_URL = '/static/'STATIC_ROOT=os.path.join(BASE_DIR,"/static/") # 使用collectstatic 后静态文件的存放绝对路径STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')] # 存放静态文件的目录,其中也可以包含url# 文件上传MEDIA_ROOT = os.path.join(BASE_DIR, 'media')MEDIA_URL = '/media/'
project/project/urls.py
中为静态文件和上传文件配置URL# urls.pyfrom django.urls import path, include, re_pathfrom django.views.static import servefrom django.conf import settingsurlpatterns = [ ... re_path(r'^static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT}, name='static'), re_path(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}, name='media')]
settings.py
中# 终端python manage.py collectstatic
python manage.py runserver 0:8000
此后,若静态文件发生改变后再出现404错误,再次执行
python manage.py collectstatic
即可
更新中...
^O^