python中的STATIC_URL、STATICFILES_DIRS、STATIC_ROOT的區別

再講它們三個的區別之前,先說一下在python的web項目中靜態資源文件一般放在哪裏。

靜態資源文件一般放的位置有兩種:

1、在每個app裏面新建一個static文件夾,將靜態文件放到裏面,在加載靜態文件時,比如要在模板中用到靜態文件,django會根據模板中配置的靜態文件的路徑自動在每個app裏面的static文件夾裏搜索。Django的STATICFILES_FINDERS設置項中包含一個查找器列表,它們知道如何從各種源中找到靜態文件。 其中一個默認的查找器是AppDirectoriesFinder,它在每個INSTALLED_APPS下查找static子目錄。所以,不要把static文件夾的名字寫錯, 否則django就找不到你的文件夾了。

2、在所有的app外面,也就是和app同級目錄下,建立一個公共的文件夾, 因爲有些靜態文件不是某個app獨有的,那麼就可以把它放到一個公共文件夾裏面,方便管理。注意,建立一個公共的靜態文件的文件夾只是一種易於管理的做法,不是必須的;因爲app是可以跨app應用靜態文件的,因爲最後所有的靜態文件都會在STATIC_ROOT裏面存在。

一:STATIC_URL:指出瀏覽器訪問靜態資源的“根路徑”。

(1)在圖1配置的情況下,從瀏覽器訪問項目中的靜態資源時,圖2中的“根路徑”就是STATIC_URL指定的字符串;

(2)Django會根據“根路徑”後面的路徑從項目中的“公共的靜態文件的文件夾”中和每個APP裏的static文件夾中去查找靜態資源,然後返回給瀏覽器顯示。

(3)爲了兼容性,在模板中配置靜態資源文件時,可以用STATIC_URL來替代配置的staticss,如下<img src="{{STATIC_URL}}1.jpg " />

二:STATICFILES_DIRS:告訴Django哪個目錄是“公共的靜態文件的文件夾”。

(1)開篇已經講述了靜態文件一般放置的兩個地方,第一:靜態文件放置在每個APP裏的位置和靜態文件所在文件夾名字都是規定好的;第二:那現在的問題就是如何讓django知道哪個文件夾是“公共的靜態文件的文件夾”,也就是你把一些靜態文件放到app以外的哪個公共文件夾中;這就需要配置STATICFILES_DIRS了,如上圖。

(2)STATICFILES_DIRS告訴django,首先到STATICFILES_DIRS裏面尋找靜態文件,其次再到各個app的static文件夾裏面找。注意, django查找靜態文件是惰性查找,查找到第一個,就停止查找了,所以是有優先級的。

(3)設置STATICFILES_DIRS之後,需要在settings.py中2個地方進行如下設置,否則會發生取不到資源的錯誤:

       【1】. INSTALLED_APPS 中,加入 'django.contrib.staticfiles'

       【2】. TEMPLATES 中,context_processors中,加入django.template.context_processors.static

三:STATIC_ROOT:後期再補充

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章