Django中靜態文件路徑的配置

官方文檔 https://docs.djangoproject.com/en/1.8/howto/static-files/

裏面涉及幾個個參數:

(1)第一個參數
STATIC_URL = '/static/'
配置了該參數,那麼在app路徑下的static/my_app/img/myexample.jpg這個路徑的 文件可以這樣在模板中使用。
{% load staticfiles %}
<img src="{% static "my_app/img/myexample.jpg" %}" alt="My image"/>
這個路徑既然是在app路徑下的,那麼app自包含的靜態文件應該放在這裏。形成了 自包含的一個app,這樣可以隨時把這個app複製到別的項目 中使用。

(2)那麼如果有些靜態文件不屬於app,而是屬於項目的,或者操作系統其他絕對路徑 的怎麼辦。
看第二個參數
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
    '/var/www/static/',
)

這樣在模板中是不用變更的,仍然是上面那樣的寫法,只不過查找路徑增加了兩 個,可以查找項目下的static路徑。


(3)接下來那麼如果我要把項目上線了,部署在http服務器中,但是每個app中都有靜態文 件,每個project中都有靜態文件,路徑太多,怎麼辦?

看第三個參數
STATIC_ROOT = "/var/www/example.com/static/"
在定義完該參數後,我們可以運行
python manage.py collectstatic命令,它將會自動把上面配置的靜態路徑下的所有文件複製到STATIC_ROOT 路徑中。這樣就可以統一在http服務器中配置靜態文件。

(4)注意:

(a)如果我們在多個app下使用這樣的路徑static/imgs/xxx.png,那 麼我們在collectstatic後,相同 名字的會覆蓋,導致問題。所以我們一般在app下的static下加上app的namespace,形成static/myapp_name /imgs/xxx.png這 樣的結構,即使多個app的靜態文件複製到同一個文件夾下,也 沒有問題。

(b)配置完static後,配置contrib.staticfiles
在settings.py文件中找到INSTALLED_APPS,確保其中包含有’django.contrib.staticfiles',一般該配置以默認加入了,如果你開發的時候使用的是runserver方式啓動服務器,那麼你就完成了所有配置,如果你使用其他服務器來開發,則還需要在項目的urls.py中加上如下配置:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns    
# ... the rest of your URLconf goes here ...    
urlpatterns += staticfiles_urlpatterns() 
 需要注意的是,上面代碼的第一行必須放在整個urls文件的第一行,上面代碼的最後一行必須放在urls文件的最後一行。


那麼在開發中,我們關注的:
1、如果僅需要在app中添加靜態文件,STATIC_URL就可以滿足我們。
2、如果需要在項目目錄下,或者別的系統目錄下添加靜態文件,那麼 STATICFILES_DIRS就可以滿足我們
3、如果我們要把項目上線,那麼我們需要配置STATIC_ROOT並且collectstatic, 這樣可以在http服務器中統一配置靜態文 件路徑,方便做7層負載均衡,或者cdn 等加速靜態文件加載的高級功能。

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