# 第八節:加載靜態文件
# 加載靜態文件
在一個網頁中,不僅僅只有一個`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