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

Django 靜態檔案

settings.py 靜態檔案相關示例程式碼及說明:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

# Static files (CSS, JavaScript, Images)

# https://docs.djangoproject.com/en/1.8/howto/static-files/

 

STATIC_URL = '/static/'

 

# 當執行 python manage.py collectstatic 的時候

# STATIC_ROOT 資料夾 是用來將所有STATICFILES_DIRS中所有資料夾中的檔案,以及各app中static中的檔案都複製過來

# 把這些檔案放到一起是為了用apache等部署的時候更方便

STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')

 

# 其它 存放靜態檔案的資料夾,可以用來存放專案中公用的靜態檔案,裡面不能包含 STATIC_ROOT

# 如果不想用 STATICFILES_DIRS 可以不用,都放在 app 裡的 static 中也可以

STATICFILES_DIRS = [

    os.path.join(BASE_DIR, "common_static"),

    '/path/to/others/static/',  # 用不到的時候可以不寫這一行

]

 

# 這個是預設設定,Django 預設會在 STATICFILES_DIRS中的資料夾 和 各app下的static資料夾中找檔案

# 注意有先後順序,找到了就不再繼續找了

STATICFILES_FINDERS = (

    "django.contrib.staticfiles.finders.FileSystemFinder",

    "django.contrib.staticfiles.finders.AppDirectoriesFinder"

)

 

靜態檔案放在對應的 app 下的 static 資料夾中 或者 STATICFILES_DIRS 中的資料夾中。

當 DEBUG = True 時,Django 就能自動找到放在裡面的靜態檔案。(Django 通過 STATICFILES_FINDERS 中的“查詢器”,找到符合的就停下來,尋找的過程 類似於 Python 中使用 import xxx 時,找 xxx 這個包的過程)。

示例專案 dj18static, 應用 app 下面有一個 static 裡面有一個 zqxt.png 圖片:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

dj18static

├── blog

│   ├── __init__.py

│   ├── admin.py

│   ├── migrations

│   │   └── __init__.py

│   ├── models.py

│   ├── static # 應用 blog 下的 static, 預設會找這個資料夾

│   │   └── 【zqxt.png】

│   ├── tests.py

│   │

│   └── views.py

├── common_static # 已經新增到了 STATICFILES_DIRS 的資料夾

│   └── js

│       └── 【jquery.js】

├── dj18static

│   ├── __init__.py

│   ├── settings.py

│   ├── urls.py

│   └── wsgi.py

└── manage.py

開啟開發伺服器 python manage.py runserver 直接訪問 /static/zqxt.png 就可以找到這個靜態檔案。

也可以在 settings.py 中指定所有 app 共用的靜態檔案,比如 jquery.js 等

1

2

3

STATICFILES_DIRS = (

    os.path.join(BASE_DIR, "common_static"),

)

把 jquery.js 放在 common_static/js/ 下,這樣就可以 在 /static/js/jquery.js 中訪問到它!
 

當static資料夾放在與app同級的情況

settings的配置為: