django1.10使用本地靜態文件方法
本文介紹的靜態文件使用,是指啟動web站點后,訪問靜態資源的用法,實際靜態資源地址就是一個個的url
如果沒有啟動web站點,只是本地調試html頁面,那直接用相對路徑訪問資源即可
1.settings.py中加入下面兩句話(應該是默認的,不需要增加)
STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static')
說明:
1.STATIC_URL為訪問靜態資源的鏈接,比如127.0.0.1/static/文件
2.STATIC_ROOT為訪問靜態資源文件的目錄,BASE_DIR為根目錄,可以打印一下看看。然后后面跟的是具體的子目錄
比如我用的是根目錄下的webManage/static目錄
STATIC_ROOT = os.path.join(BASE_DIR, 'webManage/static')
2.配置urls.py文件
from django.views import static from 工程目錄 import settings url(r'^static/(?P<path>.*)$', static.serve, {'document_root':settings.STATIC_ROOT}, name='static'),
3.訪問靜態資源
靜態資源鏈接:根據STATIC_URL定義的值作為前綴,后面跟具體文件名
靜態文件放置位置:STATIC_ROOT下的文件夾內
比如我文件放在了STATIC_ROOT/js/pie.js下,我可以像下面這樣調用pie.js文件
<script src="/static/js/pie.js"></script>
遇到的問題
問題1:
django 1.10 urls.py配置static靜態文件的鏈接
url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}, name='static'),
報錯:raise TypeError('view must be a callable or a list/tuple in the case of include().')
解決方法:
改成下面的 格式
from django.views import static from 工程目錄 import settings url(r'^static/(?P<path>.*)$', static.serve, {'document_root':settings.STATIC_ROOT}, name='static'),
原因:django 1.10 url的格式變了,需要引入view對象,然后調用view對象中的方法,不能直接用字符串的形式了
參考文檔:
問題2:
訪問靜態文件時,報下面的錯誤
django.core.exceptions.ImproperlyConfigured: The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
解決方法:
修改settings.py文件,將STATICFILES_DIRS中包含的STATIC_ROOT的路徑刪除掉
比如我的STATICFILES_DIRS原來包含了../webManage/static/,而我實際上是用這個地址作為我的靜態資源文件地址
STATICFILES_DIRS = ( # 動態的獲取static文件的路徑,注釋掉STATIC_ROOT的路徑 # os.path.join(os.path.dirname(__file__), '../webManage/static/').replace('\\', '/'), os.path.join(os.path.dirname(__file__), '../static/').replace('\\', '/'), os.path.join(os.path.dirname(__file__), '../static/js/').replace('\\', '/'), )
