Django部署时STATIC/MEDIA配置
一、DEBUG=True模式
开发环境,即 DEBUG=True
在settings.py
中配置
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
- 如果不需要在web中通过url查看静态文件,就不需要在url层配置静态url
runserver
会根据setting配置自动对静态文件进行处理,只在开发环境下生效,在生产环境下不会生效
二、DEBUG=False模式
生产环境,即 DEBUG=False
- 此时,不会在使用django内置的web服务器,需要手动指定,一般python使用
uWSGI服务器
部署需要以下修改:
-
需要在
settings.py
中配置STATIC_ROOT
,用于存放collectstatic
收集到的所有静态文件STATIC_ROOT = os.path.join(BASE_DIR, "all_static") # 注意:STATIC_ROOT 不能和 STATICFILES_DIRS重复
-
collectstatic
收集静态文件# static目录静态文件和django自带的后台admin静态文件打包一起放,并保存在 STATIC_ROOT路径下 python3 manage.py collectstatic
-
urls.py中添加url,包括
static
和media
两部分from django.views.static import serve url(r'^static/(?P<path>.*)$', serve, {"document_root": settings.STATIC_ROOT}), url(r'^media/(?P<path>.*)$', serve, {"document_root": settings.MEDIA_ROOT}),
生产环境配置总结
# urls.py
from django.conf.urls import url
from django.views.static import serve
from django.conf import settings
urlpatterns = [
...,
url(r'^static/(?P<path>.*)$', serve, {"document_root": settings.STATIC_ROOT}),
url(r'^media/(?P<path>.*)$', serve, {"document_root": settings.MEDIA_ROOT}),
]
# settings.py
DEBUG = False
# static配置,服务器开发的静态文件
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static")
]
STATIC_ROOT = os.path.join(BASE_DIR, "all_static")
MEDIA_URL = "/media/"
# media配置,用户上传的文件都默认放在这个文件夹下
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
博客内容仅供参考,部分参考他人优秀博文,仅供学习使用