2 Django静态文件配置详情
- static,开发所需要的图片、css、js等。例如:默认头像
- media,用户上传excel、图片等。 例如:用户上传头像
- 上传逻辑,视图-> 写入media目录
- 配置media路径
- 路由配置
- 用户观看
1 项目根目录配置
路径配置(比如导入JavaScript、css、bootstrap)
-
首先在项目的根目录下创建一个
static文件夹,并在settings.py文件中配置如下:STATIC_URL = '/static/' # url访问时的路径 STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static') # 此‘static’和创建的静态文件名称一致即可。 ]此时也就可以使用url访问静态文件夹下的静态文件了:http://127.0.0.1:8000/static/jquery-3.6.0.min.js
-
在模板中使用
方式一:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="/static/jquery-3.6.0.min.js"></script> </head> <body> </body> </html>方式二:
{% load static %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="{% static 'jquery-3.6.0.min.js' %}"></script> </head> <body> </body> </html>
2 App目录下配置
如果static文件夹创建在了app文件夹下,那么模板使用时,最好用load。

问:如果存在多个app时,static文件夹使用的是哪个?
1.首先Django会按照,app的注册顺序依次往下查找static文件夹。
2.在app下创建static文件夹时,注意创建自己app文件夹的,便于与其它app进行区分。
注:多app开发:各自app的图片放在各自
/static/app名字/。。。
-
在开发过程中
-
禁止
<img src="/static/api/1.png"> -
建议
{% load static %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>登录页面</h1> <a href="/xxx/xxxxx/">调换dao xx</a> <a href="{% url 'login' %}">跳转</a> <img src="{% static 'api/1.png' %}"> </body> </html>
-
3 补充
开发中在开启了debug模式时,django可以通过配置,允许用户通过对应的url地址访问django的静态文件。
setting.py,代码:
STATIC_ROOT = BASE_DIR / 'static'
STATIC_URL = '/static/' # django模板中,可以引用{{STATIC_URL}}变量避免把路径写死。
总路由,urls.py,代码:
from django.views.static import serve as serve_static
urlpatterns = [
path('admin/', admin.site.urls),
# 对外提供访问静态文件的路由,serve_static 是django提供静态访问支持的映射类。依靠它,客户端才能访问到django的静态文件。
path(r'static/<path:path>', serve_static, {'document_root': settings.STATIC_ROOT},),
]
注意:项目上线以后,关闭debug模式时,django默认是不提供静态文件的访问支持,项目部署的时候,我们会通过收集静态文件使用nginx这种web服务器来提供静态文件的访问支持。
4 media配置
第一步:在settings文件中配置如下:
import os
# http://127.0.0.1:8000/media/
MEDIA_URL = '/media/' # 访问前缀
# 文件目录
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # 该目录可以手动创建也可以自动创建
第二步:在url中配置
from django.urls import re_path
from django.views.static import serve
from django.conf import settings
urlpatterns = [
# http://127.0.0.1:8000/media/1.png
# http://127.0.0.1:8000/media/xxx/w1.jpg
re_path(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}, name='media'),
]

浙公网安备 33010602011771号