django css樣式,圖片路徑問題解決方案

在用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
好比個人工程配置以下:javascript

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


注意前面的css,js,images,upload 必定要與你的目錄結構名稱保持一致。
配置好了你再次啓動django ,而後訪問:
http://localhost:8000/static/js/myjs.js就看到結果了,說明找到路徑,一樣css,image圖片均可以找到了.

早模板中的使用
java

<script type="text/javascript" src="/static/js/myjs.js"></script> 
python


採用這種方式就能夠了。css與圖片一樣的道理。

注意在上訴狀況下,只能在開啓 DEBUG=True 時才能生效,在咱們開發的時候很方便。若是設置DEBUG=False 將不會生效。這種狀況時,要採用生產環境的 配置。用web application server 來處理這些靜態的圖片,css,以及js文件。

生產環境的處理
1.設置 DEBUG=False
2.能夠不用配置STATICFILES_DIRS
3.配置web application server ,好比我用 nginx:
nginx

location ^~ /static {
        root /opt/www/MyNet;
}
web


這樣,就天然找到static路徑,不用 django去處理了。若是想配置生產環境的,能夠參考我寫的另外一篇文章:生產環境上配置django

備註:我看到有的文章在urls.py 中進行配置,確實能夠,但我以爲這不是個好方法。好比:django

MEDIA_ROOT=os.path.join(os.path.dirname(__file__),'media').replace('\\','/') #若是是*nix系統,不須要replace函數
MEDIA_URL='/media/' #末尾必定要加上/
ADMIN_MEDIA_PREFIX = '/media/admin/' #填啥均可以,就是不能跟MEDIA_URL同樣
瀏覽器


而後app

(r'^media/(?P.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT})
函數

相關文章
相關標籤/搜索