# 第八节:加载静态文件
# 加载静态文件
在一个网页中,不仅仅只有一个`html`骨架,还需要`css`样式文件,`js`执行文件以及一些图片等。因此在`DTL`中加载静态文件是一个必须要解决的问题。在`DTL`中,使用`static`标签来加载静态文件。要使用`static`标签,首先需要`{% load static %}`。加载静态文件的步骤如下:
1. 首先确保`django.contrib.staticfiles`已经添加到`settings.INSTALLED_APPS`中。
2. 确保在`settings.py`中设置了`STATIC_URL`。
3. 在已经安装了的`app`下创建一个文件夹叫做`static`,然后再在这个`static`文件夹下创建一个当前`app`的名字的文件夹,再把静态文件放到这个文件夹下。例如你的`app`叫做`book`,有一个静态文件叫做`zhiliao.jpg`,那么路径为`book/static/book/zhiliao.jpg`。(为什么在`app`下创建一个`static`文件夹,还需要在这个`static`下创建一个同`app`名字的文件夹呢?原因是如果直接把静态文件放在`static`文件夹下,那么在模版加载静态文件的时候就是使用`zhiliao.jpg`,如果在多个`app`之间有同名的静态文件,这时候可能就会产生混淆。而在`static`文件夹下加了一个同名`app`文件夹,在模版中加载的时候就是使用`app/zhiliao.jpg`,这样就可以避免产生混淆。)
4. 如果有一些静态文件是不和任何`app`挂钩的。那么可以在`settings.py`中添加`STATICFILES_DIRS`,以后`DTL`就会在这个列表的路径中查找静态文件。比如可以设置为:
```
<pre class="calibre12">```
STATICFILES_DIRS = [
os.path.join(BASE_DIR,<span class="hljs-string">"static"</span>)
]
```
```
5. 在模版中使用`load`标签加载`static`标签。比如要加载在项目的`static`文件夹下的`style.css`的文件。那么示例代码如下:
```
<pre class="calibre12">```
{% load static %}
<span class="hljs-tag"><<span class="hljs-class">link</span> <span class="hljs-class">rel</span>=<span class="hljs-string">"stylesheet"</span> <span class="hljs-class">href</span>=<span class="hljs-string">"{% static 'style.css' %}"</span>></span>
```
```
6. 如果不想每次在模版中加载静态文件都使用`load`加载`static`标签,那么可以在`settings.py`中的`TEMPLATES/OPTIONS`添加`'builtins':['django.templatetags.static']`,这样以后在模版中就可以直接使用`static`标签,而不用手动的`load`了。
7. 如果没有在`settings.INSTALLED_APPS`中添加`django.contrib.staticfiles`。那么我们就需要手动的将请求静态文件的`url`与静态文件的路径进行映射了。示例代码如下:
```
<pre class="calibre12">```
<span class="hljs-keyword">from</span> django.conf <span class="hljs-keyword">import</span> settings
<span class="hljs-keyword">from</span> django.conf.urls.static <span class="hljs-keyword">import</span> static
urlpatterns = [
<span class="hljs-title"># 其他的url映射</span>
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
```
```
- Introduction
- 第一章:学前准备
- 第一节:虚拟环境
- 第二节:准备工作
- 第三节:Django介绍
- 第四节:URL组成部分
- 第二章:URL与视图
- 第一节:第一个Django项目
- 第二节:视图与URL分发器
- 第三章:模板
- 第一节:模板介绍
- 第二节:模板变量
- 第三节:常用标签
- 第四节:常用过滤器
- 第五节:自定义过滤器
- 第七节:模版结构优化
- 第八节:加载静态文件
- 第四章:数据库
- 第一节:MySQL相关软件
- 第二节:数据库操作
- 第三节:ORM模型
- 第四节:模型常用字段
- 第五节:外键和表关系
- 第六节:增删改查操作
- 第七节:查询操作
- 第八节:QuerySet API
- 第九节:ORM模型迁移
- 第十节:ORM作业
- 第十一节:ORM作业参考答案
- 第十二节:Pycharm连接数据库
- 第五章:视图高级
- 第一节:限制请求method
- 第二节:页面重定向
- 第三节:HttpRequest对象
- 第四节:HttpResponse对象
- 第五节:生成CSV文件
- 第六节:类视图
- 第七节:错误处理
- 第六章:表单
- 第一节:表单概述
- 第二节:用表单验证数据
- 第三节:ModelForm
- 第四节:文件上传
- 第七章:cookie和session
- 第八章:上下文处理器和中间件
- 第一节:上下文处理器
- 第二节:中间件
- 第九章:安全
- 第一节:CSRF攻击
- 第二节:XSS攻击
- 第三节:点击劫持攻击
- 第四节:SQL注入
- 第十章:信号
- 第一节:什么是信号
- 第十一章:验证和授权
- 第一节:概述
- 第二节:用户对象
- 第三节:权限和分组
- 第十二章:Admin系统
- 第十三章:Django的缓存
- 第十四章:memcached
- 第十五章:Redis