Django关闭Debug模式后正确加载Media与Static文件的配置方法
本文详解Django在关闭Debug模式后如何正确配置并加载Static和Media静态文件。通过修改url.py路由、设置STATIC_ROOT与MEDIA_ROOT,以及合理使用django.contrib.staticfiles,解决生产环境中图片、CSS及JS无法访问的问题,适用于中小型及大型多App项目。
Django静态文件配置背景
在开发阶段,通常保持Debug模式开启,以便快速定位和排查代码中出现的各类问题。
关闭Debug后的路由配置
当项目进入部署阶段时,需要关闭Debug模式。此时,若需正确访问静态文件和图片,必须在url.py中配置相应的路由规则。
# url.py
from django.views import static
from django.conf import settings
#路由静态文件和图片
urlpatterns = [
url(r'^static/(?P<path>.*)$', static.serve, {'document_root': settings.STATIC_ROOT}, name='media')
url(r'^media/(?P<path>.*)$', static.serve, {'document_root': settings.MEDIA_ROOT}, name='media')
]
Static与Media目录的区别
补充知识:理解Django如何获取静态资源,以及对static和media目录设置的一些思考。
Static文件的正确获取方式
如果直接尝试获取静态资源文件,Django会报错,无法直接访问。
需要添加静态资源文件夹static,并在配置文件中设置静态文件的根目录。
INSTALLED_APPS = [
...
'django.contrib.staticfiles',
...
]
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/
STATIC_URL = '/static/'
# 可收集静态文件到static文件夹,便于访问
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
完成上述配置后,即可通过特定代码调用静态资源,包括图片、CSS和JS文件。
{% load static %}
...
...
<img class="author_img rounded-circle" src="{% static 'image/blog/author.png' %}" alt="" >
Media文件的配置与调用
然而,上传到media目录中的文件可以不通过上述静态文件的方式调用,但前提是必须在配置文件中设置media文件的根路径和根目录。
MEDIA_URL = '/media/' # 访问文件的url根路径 MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # 上传文件存储根目录
配置完成后,可以通过如下方法调用media文件。
<img class="img-fluid" src="/media/{{ detop_view.cover_photo }} " alt="post">
注意这里资源引用没有使用{% static ... %}标签。实际上,只要在settings.py文件中正确配置了相关路径和目录,就可以直接通过URL方式引用这些文件。
大型项目的静态文件管理策略
如果所有静态文件都采用这种方法引用,对于小项目而言并非问题,你可以将静态文件放置在Web服务器能够访问到的任何位置。但对于大型项目,尤其是包含多个App的项目,处理由各个App带来的多套不同静态文件会变得非常繁琐。这正是django.contrib.staticfiles模块的作用:它负责收集每个应用(以及任何你指定的地方)的静态文件到一个统一的指定位置,从而简化访问管理。
media目录通常用于存放用户上传的文件。在将Django项目部署到服务器时,会执行python manage.py collectstatic命令来收集静态资源文件。因此,media目录与static目录并不冲突,且media中的文件可能会被删除或更新。所以,后期用户上传的文件不应放在static目录下,而应放在media目录下。
以上即为大家分享的Django关闭Debug模式后如何正确加载media图片与static静态文件的完整内容,希望能对大家有所帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









