在介绍分布式路由之前,先介绍下静态文件,比如图片,音视频文件,这些都属于静态文件。以百度首页为例:
大部分都是静态文件,以图片为例,浏览器加载img标签,解读里面的src属性,对src里面的地址发http请求,当浏览器接收到响应的时候,进行渲染并展示。那在djnango发送静态文件,如何使用呢?
在settings.py中,配置静态文件的访问路径[默认是配置了的]
STATIC_URL = '/static/'
访问静态文件时,通过/static/xxx或者http://127.0.0.0:8000/static/xxx,其中[xxx表示具体的静态资源位置],这些静态文件一定是存放在服务器上的,那如何得知存放在服务器的什么位置呢,此时需要使用到第二项功能。
配置静态文件的存储路径 STATICFILES_DIRS,STATICFILES_DIRS保存的是静态文件在服务器上的存放位置。
#file:settings.py
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
)
我们创建一个mysite3的项目,结合上面介绍的知识进行学习
F:\Django\DjangoStudy>django-admin startproject mysite3
同样设置下setting.py中的crsf(注释),将语言设置为中文 TIME_ZONE = ‘Asia/Shanghai’,已经设置时区和配置静态文件的存放位置,配置模板文件的路径
#设置模板文件的路径
'DIRS': [os.path.join(BASE_DIR,'templates')],
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
#配置静态文件访问路径,默认已有
STATIC_URL = '/static/'
#配置静态文件的存放位置,手动新增
STATICFILES_DIRS = (os.path.join(BASE_DIR,'static'),)
按照如上的目录层级创建文件夹,比如这里创建了静态文件路径,在static路径下,创建了image和js路径,这里举例说明,在image下添加一个djagno.jpg的图片。接着在urls.py中新增路由
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('test_static',views.test_static)
]
在mysite3二级子目录下新增一个views.py文件,并新增视图函数
from django.shortcuts import render
def test_static(reqeust):
return render(reqeust,'test_static.html')
在templates目录下新增一个test_static.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试静态文件</title>
</head>
<body>
<img src="http://127.0.0.1:8000/static/image/django.jpg" width="200px" height="200px">
<img src="/static/image/django.jpg" width="200px" height="200px">
</body>
</html>
加载静态资源的方式可以通过绝对路径和相对路径的两种方式
整体目录结构如下所示:
虽然以上两种方法可以加载静态资源,但这两种方法很不Django;使用django的方式访问静态文件,通过{% static %}标签访问静态文件,
- 加载static- {% load static %}
- 使用静态资源-{% staitc ‘静态资源路径’ %}
- 样例 < img src="{% staitc ‘image/django.jpg’ %}" >
在test_static.html中新增一个django方式的加载图片
{% load static %}
<img src="{% static 'image/django.jpg' %}" width="200px" height="200px">
运行结果如下所示,依次展示为绝对路径,相对路径,和django方式的路径进行静态资源访问