django1.3中的static files 如何serve自己手動放進去的images,css,js等檔案,解決404錯誤

來源:互聯網
上載者:User

我們知道,django1.3開始django使用了一個叫做staticfiles的contrib app.

這個app主要是用來server靜態檔案的,與media的區別就是,staticfiles是網站本身需要用到的images,css,js,而media就是定義為網站使用者上傳的頭像,圖片,檔案等等.這樣一區分,就容易分開管理檔案了.static的優點就是集中管理django網站項目各個app使用的靜態檔案.

豆瓣有一篇介紹的比較詳細:django 1.3 中顯示圖片,使用靜態檔案的問題(django static files)

http://www.douban.com/note/152041308/

manage.py collectstatic 這一命令將散落在各個app子目錄下的static檔案夾中的靜態檔案複製到一個目錄(STATIC_ROOT,我用的是/static/,就是項目根目錄下的static檔案夾),同時被複製過來的還有STATICFILES_DIRS裡面的檔案.

我這裡就不廢話多說別人已經說過的東西了.

我要說的是,如何serve自己手動放進去的images,css,js等檔案.

因為我發現我以前django1.2之前的版本,所有網站使用的檔案都是放在media_root下面的.現在有了staticfiles,肯定還是放在static檔案夾下面,但是把一些公用的images,css檔案夾直接複製到static下面後,居然發現不能serve這些靜態檔案.瀏覽器中直接存取
http://localhost:8000/static/images/logo.jpg ,就會出現404錯誤.

我在網上找過一些這方面的資料,但是官方網站上說的是不要手動放置任何檔案到static目錄下.既然我的那些images是公用的檔案,又不屬於任何一個app,那就只有想別的辦法了.

新浪網上的朋友有一篇:django 架構下關於引用靜態檔案的配置方法

http://blog.sina.com.cn/s/blog_6b43aa770100taai.html

裡面說到的解決辦法是:

解決辦法: 1.通常在django下所有的靜態檔案(.img|.css|.js|other)都放在一個static檔案夾下2.在後來的處理當中,發現static檔案夾上一層還需要一個檔案夾,不要直接放在根目錄下.<<<他說的重點是把static不放在根目錄下,我不願意.

其實可以一試.不過我沒有按照這樣嘗試.還是從官方文檔中找線索.

STATICFILES_DIRS是一個可以引起注意的配置選項,我試著把它修改為:

STATICFILES_DIRS = (    STATIC_ROOT,)

但是它報錯說,STATIC_ROOT不能出現在STATICFILES_DIRS之中.

官網文檔提到是STATICFILES_DIRS中配置的目錄其實是tuple,例如:

STATICFILES_DIRS = (    # ...    ("downloads", "/opt/webfiles/stats"),)

以上來自官網文檔:https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/

這個"downloads"其實是一個prefix,相對於STATIC_URL用的.所以可以使用http://localhost:8000/static/downloads  來訪問他定義的目錄下的資源.

所以我的嘗試就開始於這裡:

# Additional locations of static filesSTATICFILES_DIRS = (    # Put strings here, like "/home/html/static" or "C:/www/django/static".    # Always use forward slashes, even on Windows.    # Don't forget to use absolute paths, not relative paths.    ("images", os.path.join(STATIC_ROOT,'images').replace('\\','/')),    ("css",    os.path.join(STATIC_ROOT,'css').replace('\\','/')),    ("js",     os.path.join(STATIC_ROOT,'js').replace('\\','/')),)

做了這些之後,OK了.

直接存取http://localhost:8000/static/images/logo.jpg 瀏覽器中能看到了.
行文至此,似乎多說的必要了.各位請拍磚.

 

相關文章

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.