Django应用中的静态文件处理
在日常开发中,我们都是把Django的Debug模式打开,方便调试,在这个模式下,由Django内置的Web服务器提供静态文件服务,不过需要进行一些配置,才能正确访问。
配置settings
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'static_collected')
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'static', 'media')
MEDIA_URL = '/media/'
配置路由
from django.conf import settings
from django.urls import path, include
from django.conf.urls.static import static
urlpatterns = [
...
]
# 调试模式下的静态文件服务
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
这样就可以在Debug模式下正常访问静态文件了,不过我们在把应用部署到生产环境之后,为了安全起见,不能开启Debug模式,这个时候就需要使用nginx或者Apache之类的服务器来提供静态文件服务。
在这之前,还需要运行
python manage.py collectstatic
命令来把各个包中的静态文件收集到我们前面定义的STATIC_ROOT
中,然后再把这个路径交由nginx~
nginx配置
# Django media
location /media/ {
alias /path/to/django/static/media/; # your Django project's media files - amend as required
}
location /static/ {
alias /path/to/django/static_collected/; # your Django project's static files - amend as required
}
同时关闭Django的Debug模式,这样静态文件就都会使用nginx来提供访问~
欢迎交流
我整理了一系列的技术文章和资料,在公众号「程序设计实验室」后台回复 linux、flutter、c#、netcore、android、kotlin、java、python 等可获取相关技术文章和资料,同时有任何问题都可以在公众号后台留言~
微信公众号:「程序设计实验室」
专注于互联网热门新技术探索与团队敏捷开发实践,包括架构设计、机器学习与数据分析算法、移动端开发、Linux、Web前后端开发等,欢迎一起探讨技术,分享学习实践经验。