1. 程式人生 > >Django靜態檔案

Django靜態檔案

靜態檔案

  • 專案中的CSS、圖片、js都是靜態檔案
  • 一般會將靜態檔案放到一個單獨的目錄中,以方便管理
  • 在html頁面中呼叫時,也需要指定靜態檔案的路徑,Django中提供了一種解析的方式配置靜態檔案路徑
  • 靜態檔案可以放在專案根目錄下,也可以放在應用的目錄下,由於有些靜態檔案在專案中是通用的,所以推薦放在專案的根目錄下,方便管理

示例

  • 在test5/settings.py檔案中定義靜態檔案查詢路徑
STATIC_URL = '/static/' # 設定訪問靜態檔案訪問的url地址 
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'), #設定靜態檔案存放的物理目錄
]
  • 在專案根目錄下建立static目錄,再建立img、css、js目錄,結構如下圖
  • 在booktest/views.py中定義檢視jingtai
def jingtai(request):
    return render(request,'booktest/jingtai.html')
  • 在booktest/urls.py中配置url
    url(r'^jingtai/$',views.jingtai),
  • 在templates/booktest/下建立jingtai.html檔案
<html>
<head>
    <title>靜態檔案</title>
</head>
<body>
<img src="/static/img/sg.png"/>
</body>
</html>
  • 儲存圖片到static/img/目錄下,名稱為sg.png,目錄結構如下
  • 執行伺服器,瀏覽效果如下圖

配置靜態檔案

  • Django提供了一種配置,可以在html頁面中可以隱藏真實路徑
  • 在test5/settings.py檔案中修改STATIC_URL項
# STATIC_URL = '/static/'
STATIC_URL = '/abc/'
  • 重新整理瀏覽器,圖片找不到了
  • 修改templates/booktest/jingtai.html如下
<html>
<head>
    <title>靜態檔案</title>
</head>
<body>
修改前:<img src="/static/img/sg.png"/>
<hr>
修改後:<img src="/abc/img/sg.png"/>
</body>
</html>
  • 重新整理瀏覽器,圖出現了
  • 檢視網頁原始碼,發現可以網址和真實地址之間沒有關係
  • 為了安全可以通過配置項隱藏真實圖片路徑,在模板中寫成固定路徑,後期維護太麻煩,可以使用static標籤,根據配置項生成靜態檔案路徑
  • 修改templates/booktest/jingtai.html如下
<html>
<head>
    <title>靜態檔案</title>
</head>
<body>
修改前:<img src="/static/img/sg.png"/>
<hr>
修改後:<img src="/abc/img/sg.png"/>
<hr>
動態配置:
{%load static from staticfiles%}
<img src="{%static "img/sg.png" %}"/>
</body>
</html>
  • 重新整理瀏覽器,圖片顯示
  • 檢視網頁原始碼如下圖
  • 說明:這種方案可以隱藏真實的靜態檔案路徑,但是結合Nginx佈署時,會將所有的靜態檔案都交給Nginx處理,而不用轉到Django部分,所以這項配置就無效了,這個功能有些雞肋