如何在Django项目中同时配置静态与媒体文件及修改urls.py
Django同时配置静态文件与媒体文件的方法
能不能同时用?
完全没问题,Django本身就支持同时配置静态文件(Static Files)和媒体文件(Media Files),二者各司其职:
- 静态文件:存放项目里的固定资源,比如CSS、JS、通用图标这类开发者提前准备好的文件
- 媒体文件:存储用户上传的动态内容,比如头像、上传的文档、图片这类内容
先修正你settings.py里的错误
你当前的STATICFILES_DIRS配置有两处问题:引号未闭合,且格式不符合要求(需要是列表形式)。修正后的代码如下:
原错误代码:
STATICFILES_DIRS = BASE_DIR / 'static/
修正后:
STATICFILES_DIRS = [BASE_DIR / 'static']
顺带说明下几个配置的作用:
STATIC_ROOT:执行collectstatic命令时,收集所有app静态文件的目标文件夹,一般仅在生产环境使用STATICFILES_DIRS:告诉Django,除了各个app自身的static目录外,还要从这个指定目录查找静态资源,开发环境常用
修改urls.py的配置
开发环境下,你只需要在现有代码基础上,添加静态文件的URL映射即可,逻辑和媒体文件的配置一致。修改后的完整代码:
from django.conf import settings from django.conf.urls.static import static from django.contrib import admin from django.urls import include, path urlpatterns = [ path('admin/', admin.site.urls), path('', include('pages.urls')), path('users/', include('users.urls')), path('users/', include('django.contrib.auth.urls')), ] # 仅在开发环境(DEBUG=True)下添加静态和媒体文件的URL映射 if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
为啥加if settings.DEBUG:判断?
因为生产环境中,通常由Nginx、Apache这类Web服务器直接处理静态和媒体文件,不需要Django来承担这个工作,这样能大幅提升服务性能。
验证配置是否生效
- 静态文件:在
static文件夹中放入一张test.jpg,访问http://localhost:8000/static/test.jpg能正常显示即配置成功 - 媒体文件:上传一个文件后,访问对应的
media/路径下的文件,能正常打开即说明配置没问题
内容的提问来源于stack exchange,提问作者Nicolas_Darksoul
相关产品推荐
相关产品推荐

