Django - 全域性靜態檔案
新增全域性 CSS 檔案
我們已經學習瞭如何在應用程式的 static
資料夾中新增靜態檔案,以及如何在應用程式中使用它。
但是,如果您專案中的其他應用程式也想使用該檔案怎麼辦?
那麼,我們就必須在根目錄建立一個資料夾,並將檔案放在那裡。
僅僅在根目錄建立一個 static
資料夾是不夠的,Django 會處理剩餘的部分。我們需要告訴 Django 在哪裡查詢這些靜態檔案。
首先,在專案的根目錄下建立一個資料夾,這個資料夾的名字可以隨意取,在本教程中我將它命名為 mystaticfiles
。
my_tennis_club
db.sqlite3
manage.py
my_tennis_club/
members/
mystaticfiles/
在 mystaticfiles
資料夾中新增一個 CSS 檔案,檔名可以隨意選擇,在本例中我們稱之為 myglobal.css
。
my_tennis_club
db.sqlite3
manage.py
my_tennis_club/
members/
mystaticfiles/
myglobal.css
開啟 CSS 檔案並插入以下內容
my_tennis_club/mystaticfiles/myglobal.css
:
body {
color: violet;
}
修改設定
您需要告訴 Django 也去根目錄的 mystaticfiles
資料夾中查詢靜態檔案,這在 settings.py
檔案中完成。
新增一個 STATICFILES_DIRS
列表
my_tennis_club/my_tennis_club/settings.py
:
.
.
STATIC_ROOT = BASE_DIR / 'productionfiles'
STATIC_URL = 'static/'
#Add this in your settings.py file:
STATICFILES_DIRS = [
BASE_DIR / 'mystaticfiles'
]
.
.
在 STATICFILES_DIRS
列表中,您可以列出 Django 應該查詢靜態檔案的所有目錄。
BASE_DIR
關鍵字表示專案的根目錄,與 / "mystaticfiles"
一起,意味著根目錄下的 mystaticfiles
資料夾。
搜尋順序
如果您有同名的檔案,Django 會使用第一個找到的檔案。
搜尋首先在 STATICFILES_DIRS
中列出的目錄中進行,按照您提供的順序。然後,如果檔案未找到,搜尋將繼續在每個應用程式的 static
資料夾中進行。
修改模板
現在您有了一個用於整個專案的全域性 CSS 檔案,所有應用程式都可以訪問它。
要在模板中使用它,請使用與 myfirst.css
檔案相同的語法。
在模板開頭新增以下內容
{% load static %}
並像這樣引用檔案
<link rel="stylesheet" href="{% static 'myglobal.css' %}">
示例
my_tennis_club/members/templates/template.html
:
{% load static %}
<!DOCTYPE html>
<html>
<link rel="stylesheet" href="{% static 'myglobal.css' %}">
<body>
{% for x in fruits %}
<h1>{{ x }}</h1>
{% endfor %}
</body>
</html>
執行示例 »
不起作用?
這是正確的。您需要再次收集靜態檔案。
收集靜態檔案
執行 collectstatic 命令來收集新的靜態檔案。
py manage.py collectstatic
這將產生以下結果:
您已請求將靜態檔案收集到目標
位置,如您的設定中所指定
C:\Users\Your Name\myworld\my_tennis_club\productionfiles
這將覆蓋現有檔案!
您確定要這樣做嗎?
輸入 'yes' 繼續,或輸入 'no' 取消
輸入 yes
輸入 'yes' 繼續,或輸入 'no' 取消: yes
這將產生以下結果:
1 個靜態檔案已複製到 'C:\Users\Your Name\myworld\my_tennis_club\productionfiles',131 個未修改。
示例應該可以工作
啟動伺服器,示例將可以工作。
py manage.py runserver
在您自己的瀏覽器中檢視結果: 127.0.0.1:8000/testing/
。
示例
my_tennis_club/members/templates/template.html
:
{% load static %}
<!DOCTYPE html>
<html>
<link rel="stylesheet" href="{% static 'myglobal.css' %}">
<body>
{% for x in fruits %}
<h1>{{ x }}</h1>
{% endfor %}
</body>
</html>
執行示例 »