在用Django 做項目時,如果在本地調試的情況下,我們會開啟 settings.py 中的 DEBUG = True
同時我們還會做如下操作:
1. 設定 STATIC_ROOT = os.path.join(os.path.dirname(__file__),'static')
2.設定 STATIC_URL = '/static/'
以上兩步我想一般都會提到,但即使你做了這樣的配置,當你在瀏覽器中瀏覽你的CSS或JS 檔案,仍然是 404 錯誤,說明路徑錯誤,根本找不到。
比如我的工程如下:
你如果輸入http://localhost:8000/static/js/myjs.js肯定出錯。經過多次實驗,按如下方法可以解決
配置STATICFILES_DIRS
比如我的工程配置如下:
STATICFILES_DIRS = (
('css',os.path.join(STATIC_ROOT,'css').replace('\\','/') ),
('js',os.path.join(STATIC_ROOT,'js').replace('\\','/') ),
('images',os.path.join(STATIC_ROOT,'images').replace('\\','/') ),
('upload',os.path.join(STATIC_ROOT,'upload').replace('\\','/') ),
)
注意前面的css,js,images,upload 一定要與你的目錄結構名稱保持一致。
配置好了你再次啟動django ,然後訪問:http://localhost:8000/static/js/myjs.js就看到結果了,說明找到路徑,同樣css,image圖片都可以找到了.
早模板中的使用
<script type="text/javascript" src="/static/js/myjs.js"></script>
採用這種方式就可以了。css與圖片同樣的道理。
注意在上訴情況下,只能在開啟 DEBUG=True 時才會生效,在我們開發的時候很方便。如果設定DEBUG=False 將不會生效。這種情況時,要採用生產環境的 配置。用web application server 來處理這些靜態圖片,css,以及js檔案。
生產環境的處理
1.設定 DEBUG=False
2.可以不用配置STATICFILES_DIRS
3.配置web application server ,比如我用 nginx:
location ^~ /static {
root /opt/www/MyNet;
}
這樣,就自然找到static路徑,不用 django去處理了。如果想配置生產環境的,可以參考我寫的另一篇文章:生產環境上配置django
備忘:我看到有的文章在urls.py 中進行配置,確實可以,但我覺得這不是個好方法。比如:
MEDIA_ROOT=os.path.join(os.path.dirname(__file__),'media').replace('\\','/') #如果是*nix系統,不需要replace函數
MEDIA_URL='/media/' #末尾一定要加上/
ADMIN_MEDIA_PREFIX = '/media/admin/' #填啥都可以,就是不能跟MEDIA_URL一樣
然後
(r'^media/(?P.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT})