静态文件
- 项目中的
图片
、CSS
、js
都是静态文件 - 一般会将静态文件放到一个单独的目录中,以方便管理
- 静态文件可以放在项目根目录下,也可以放在应用的目录下
- 由于有些静态文件在项目中是通用的,所以推荐放在项目的根目录下,方便管理
- 在项目的
settings
文件中,通过STATICFILES_DIRS
列表配置静态文件的加载路径 - 在html页面中调用静态文件时,需要指定静态文件所在的路径
需求:展示一张静态图片
展示静态图片实现
1.在项目根目录下创建存放静态文件的文件夹
把需要展示的静态图片拷贝到
images
文件夹
2.在
settings
文件中配置静态文件加载路径STATIC_URL = '/static/' # 配置静态文件加载路径 STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static') ]
3.正则匹配urls
# 展示静态图片 url(r'^index/$', views.index),
4.视图
# 展示静态图片 def index(request): return render(request, 'Book/index.html')
5.模板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>展示静态图片</title> </head> <body> <img src="/static/images/mm01.jpg" alt="mm01"> </body> </html>
思考:Django如何加载静态文件?
- 已知:
- 配置加载路径:
os.path.join(BASE_DIR, 'static')
- 图片本地路径:
/static/images/mm01.jpg
- 配置加载路径:
过程:
- 首先,判断图片本地地址的开始部分是否与
STATIC_URL
一致,如果一致则取出余下部分images/mm01.jpg
- 然后,使用
os.path.join(BASE_DIR, 'static')
拼接images/mm01.jpg
得到静态文件加载全路径
- 首先,判断图片本地地址的开始部分是否与
提示:
STATIC_URL
不一致就报404
static标签:动态生成静态文件路径
为了安全和方便维护,可以通过配置项达到隐藏真实静态文件路径的目的
- 可以使用
static标签
,根据配置项动态生成静态文件路径
- 可以使用
模板中使用
static标签
<img src="/static/images/mm01.jpg" alt="mm01">
<br>
<br>
{# 动态生成静态文件路径 #}
{% load static from staticfiles %}
<img src="{% static 'images/mm01.jpg' %}" alt="mm01">
修改
STATIC_URL
# STATIC_URL = '/static/' STATIC_URL = '/zxc/'
浏览效果
说明:这种方案可以隐藏真实的静态文件路径,但是结合Nginx布署时,会将所有的静态文件都交给Nginx处理,而不用转到Django部分,所以这项配置就无效了,这个功能有些鸡肋!