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

來源:互聯網
上載者:User

在用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})

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.