下面通過圖文並茂的方法給大家詳細介紹下Djang中靜態檔案配置方法
一、django靜態檔案配置原理
靜態檔案配置就是為了讓使用者請求時django伺服器能找到靜態檔案返回。
首先要理解幾個概念:
代碼如下:
SITE_ROOT = os.path.dirname(os.path.abspath(__file__))
SITE_ROOT = os.path.abspath(os.path.join(SITE_ROOT, '../'))
STATIC_ROOT = os.path.join(SITE_ROOT, 'collectedstatic')
STATIC_URL配置項
django模板中,可以引用{{STATIC_URL}}變數避免把路徑寫死。通常使用預設設定
代碼如下:
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX配置項
ADMIN_MEDIA_PREFIX必須為如下配置,以便staticfiles能夠正確找到django.contrib.admin的靜態資源:
代碼如下:
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
在模板中使用STATIC_URL
代碼如下:
原理懂了後,接下來介紹開發環境和生產環境中靜態檔案具體配置。
我的django版本是1.4.21,以此版本做介紹。
代碼如下:
>>> import django
>>> print django.get_version()
1.4.21
二、開發環境
django1.4,21中預設已安裝了staticfiles app,所以開發環境中對靜態檔案的訪問不需要對django做任何配置。
有一點:開發環境staticfiles尋找靜態檔案的順序取決於STATIC_FINDERS配置項,預設配置
代碼如下:
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
FileStstemFinder用來用STATICFILES_DIRS【預設為空白】指定的路徑中尋找額外的靜態檔案。像jquery,bootstrap等這樣公用的資源檔都是在多個不同的app中共用的,django提供了公有的目錄來放這些檔案,這個配置參數就是:STATICFILES_DIRS
AppDirectoriesFinder從INSTALLED_APPS元組中的APP所在包的static目錄中尋找資源檔。
使用如下。
1、建立項目lxyproject
代碼如下:
[root@yl-web srv]# django-admin.py startproject lxyproject
2、在項目中建立一個app名叫hello
代碼如下:
[root@yl-web lxyproject]# python manage.py startapp hello
[root@yl-web lxyproject]# ls
hello lxyproject manage.py
在hello app下建一個static目錄用來存放靜態檔案。
代碼如下:
[root@yl-web hello]# mkdir static
[root@yl-web hello]# ls
__init__.py models.py static tests.py views.py
然後在static目錄建立一個hello.txt的靜態檔案。
代碼如下:
[root@yl-web hello]# cd static/
[root@yl-web static]# ls
hello.txt
[root@yl-web static]# cat hello.txt
hello.txt's content:congratulations!!
3、在項目的settings.py檔案中INSTALLED_APPS中配置hello app
代碼如下:
INSTALLED_APPS = (
...
'hello',
)
4、運行項目
代碼如下:
[root@yl-web lxyproject]# python manage.py runserver 0.0.0.0:9000
5、通過url訪問
在static目錄下建立一個images目錄放一張sheep.png圖片,同理通過url訪問
三、生產環境
前面也說了,在產生環境中,集中存放靜態資源有利於使用Lighttpd/Nginx託管靜態資源。而生產環境一般是把靜態檔案放在項目根目錄下的static目錄下。
預設配置
代碼如下:
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = (
)
我們要做的是
1、設定管理員,我用的是apache。
安裝配置詳情可參考:
代碼如下:
[root@yl-web lxyproject]# python manage.py collectstatic
You have requested to collect static files at the destination
location as specified in your settings.
This will overwrite existing files!
Are you sure you want to do this?
Type 'yes' to continue, or 'no' to cancel: yes
Copying '/srv/lxyproject/hello/static/images/sheep.png'
1 static file copied.
5、設定管理員,將/static/路徑指向STATIC_ROOT目錄。
即在虛擬機器主機中配置
代碼如下:
Alias /static/ /srv/lxyproject/collectedstatic/
6、配置至此完成,通過瀏覽器訪問
真正發布一個django項目時,對靜態檔案的管理可能需要額外做一些工作:
Less / CoffeeScript 等自動編譯成css/js
"壓縮" css/js檔案,提高瀏覽器載入速度
合并零碎的css/js檔案,減少瀏覽器請求次數
靜態資源檔案的版本話:瀏覽器會緩衝靜態檔案,後台代碼和靜態資源檔案都發生更新後,瀏覽器很可能從緩衝提取到期的靜態資源,導致頁面顯示異常。
以上就是Djang中靜態檔案配置方法的全部內容,希望大家喜歡。