【6】Django----静态文件与媒体文件的配置与使用

最新参考

亲测可用,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文件夹用于存放jscssimg等文件
  • ② 在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是用户自己建的文件夹,而static2django默认的,所以需要在html中导入的静态文件其实就是<script src="/static2/jQuery-3.6.0.js"></script>,应与STATIC_URL的名一样
  • 通常情况下都用static即可

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="">
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

而又何羡乎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值