2016-03-30 88 views
0

提供靜態VS媒體提供靜態文件(CSS,JS),我設置的設置:在Django 1.9

STATIC_URL = '/static/' 
STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, "static"), 
] 

這意味着,我的所有靜態文件需要在項目的根的static文件夾

/app1 
/app2 
/media 
/statiC#They need to be stored here, all static files 
/templates 
urls.py 
settings.py 
manage.py 

但是,我將它們存儲在我的應用程序的靜態文件夾中。

/app1/static/ # Storing the static files here 
/app2/static/ #and here 
/media/ 
/static/ # but not here 

不過,Django的是能夠爲他們服務,這怎麼可能?

我用media文件試過同樣的事情;設置

MEDIA_URL = '/media/' 
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 

並將媒體(圖像等)文件存儲在每個應用程序的各個媒體目錄中。這一次,Django沒有提供這些文件,只有當我將這些文件移動到項目根目錄的media目錄或將設置更改爲MEDIA_ROOT = os.path.join(BASE_DIR, '<app_name>/media')

爲什麼我被允許爲靜態文件提供服務,即使它們不在項目根目錄static dir但不包含媒體文件 - 它們僅從根目錄media dir提供。

+0

將這個問題標記爲答案將是很好的。謝謝! – raratiru

回答

2

請仔細閱讀文檔 - https://docs.djangoproject.com/en/1.9/ref/settings/#staticfiles-finders

這恰恰指出,Django會搜索每個應用程序中的靜態文件+中設置規定的目錄中。

報價,如文檔中 -

默認會發現存儲在STATICFILES_DIRS(使用django.contrib.staticfiles.finders.FileSystemFinder),並在每個應用程序的靜態子目錄(使用Django設置文件。 contrib.staticfiles.finders.AppDirectoriesFinder)。如果存在多個具有相同名稱的文件,則將使用找到的第一個文件。

雖然對媒體文件來說這不是真的。 Django不會在子目錄中查找媒體文件。

+0

我應該解釋你downvote,因爲你沒有找到你要找的東西? – RA123

+0

我會要求你重讀這個問題。 *爲什麼我允許靜態文件提供服務,即使它們不在項目的根靜態目錄中,但不是媒體文件 - 它們只能從根目錄媒體目錄中提供。* –