最新参考
亲测可用,Django 3.0关闭Debug模式无法加载media图片与static静态文件,https://yys.zone/detail/?id=59
\blog\blog\settings.py
DEBUG = False
STATIC_URL = '/static/'
# 设置上传图片保存在media目录下
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
#STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),) # 图片目录
#STATIC_ROOT = os.path.join(BASE_DIR, "/static/") # ,这个用static能python manage.py collectstatic,但是运行django报错(?: (staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting.),用/static/能收集的C盘,具体原因待百度
# STATIC_ROOT = os.path.join(BASE_DIR, "/home/blog/static/") # 正确
#找到解决方法
if DEBUG:
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
else:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
# 设置图片访问统一路由
MEDIA_URL = '/media/'
# 媒体文件配置
CKEDITOR_UPLOAD_PATH = "uploads/" # 上传图片保存路径,如果没有图片存储或者使用自定义存储位置,那么则直接写 ' ' ,如果是使用django本身的存储方式,那么你就指名一个目录用来存储即可。
import socket
# 如果电脑名字DESKTOP-FCJ7BVI打开DEBUG
if socket.getfqdn(socket.gethostname()) == 'DESKTOP-FCJ7BVI':
DEBUG = True
else:
DEBUG = False
ALLOWED_HOSTS = ['*', ]
\blog\home\urls.py
from django.urls import re_path
from django.views import static
from django.conf import settings
urlpatterns = [
re_path(r'^static/(?P<path>.*)$', static.serve, {'document_root': settings.STATIC_ROOT}, name='media'), # 添加这行
re_path(r'^media/(?P<path>.*)$', static.serve, {'document_root': settings.MEDIA_ROOT}, name='media'), # 添加这行
]
一、static静态文件
1.1 静态文件的引入
- ① 在
Django
目录中创建一个static
文件夹用于存放js
、css
和img
等文件 - ② 在
setting.py
中导入static
下的所有静态文件
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/
STATIC_URL = '/static2/'
# 导入自己所加入的静态文件,并将其告诉给django
# BASE_DIR是前面所定义的,在BASE_DIR的基础上导入新的文件,
# 这里BASE_DIR是指项目文件所在的地址
STATICFILES_DIRS = [
os.path.join(BASE_DIR,"static1"),
]
STATIC_URL
是默认的静态文件链接,这里通过1和2区分STATICFILES_DIRS
是通过将自己的static
文件重新打开导入至STATIC_URL
中的- 相当于
static1
是用户自己建的文件夹,而static2
是django
默认的,所以需要在html
中导入的静态文件其实就是<script src="/static2/jQuery-3.6.0.js"></script>
,应与STATIC_URL
的名一样 - 通常情况下都用
static
即可
![](https://i-blog.csdnimg.cn/blog_migrate/374a2d03dd34fe9d15019d09706803a6.png)
1.2 静态文件的访问
添加完成后可通过静态文件的路径访问到所配置的静态文件。即通过URL地址寻找静态文件,根据STATIC_URL = "/static/"
指定访问静态文件时需要通过路径来访问。
- 相对路径:
/static/xxx
- 绝对路径:
http://127.0.0.1:8000/static/xxx
xxx
表示具体的静态资源文件位置,如这里访问本地的jQuery-3.6.0.js
文件
![]() |
1.3 模板中静态文件的引入方法
假设有一本地图片的连接为:static/img/a.jpg
- 绝对路径:通常不适用这种方式
<img src="http://127.0.0.1:8000/static/img/a.jpg">
- 相对路径:
<img src="/static/img/a.jpg">
{% static %}
模板标签
{% load static %}
<img src="{% static 'img/a.jpg' %}">
- 导入
CSS
文件:<link rel="stylesheet" href="/static/app01/timer.css">
- 导入
JS
文件:<script src="/static/jQuery-3.6.0.js"></script>
1.4 静态文件的部署
- 静态文件部署
- 以上
STATICFILES_DIRS
仅用于本地开发使用,上线部署需要使用STATIC_ROOT
# settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static")
# 假设static里面有一个imgs文件夹,需要用replace('\\','/')替换路劲
STATICFILES_DIRS = [
('imgs',os.path.join(BASE_DIR, 'static/imgs').replace('\\','/')),
]
from django.conf import settings
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
if settings.DEBUG or True:
# 将上面imgs里面的文件生成路由,以实现静态文件的访问
urlpatterns += staticfiles_urlpatterns()
二、media媒体文件
用于存放音乐、视频或其它大文件的文件夹,与static文件同级。
- ① 在setting.py最后添加
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
- ② 在主路由中引入urls.py中
from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG or True:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
- ③ 其余使用方法同static
# 然后皆可以访问本地的文件了
<img src="/media/image/test.png" alt="">