2012-07-10 123 views
5

我正在使用Django 1.3.1和contrib.collectstatic應用程序來管理我的靜態文件。Django靜音覆蓋

我的項目結構是

myproject 
    - settings.py 
    - static-media 
    - urls.py 
    - media 
    - manage.py 

其中static-media是包含靜態文件爲這個項目的文件夾。在我的settings.py我:

PROJECT_PATH = os.path.realpath(os.path.dirname(__file__)) 
STATIC_ROOT = os.path.join(PROJECT_PATH, "static")+'/' 
STATIC_URL = "/static/" 
STATICFILES_DIRS = (
     os.path.join(PROJECT_PATH, 'static-media'), 
) 

我使用admin_tools來改變admin的佈局。不過,我想從admin_tools覆蓋特定的css文件(theming.css)。所以在我的靜態媒體文件夾中,我把admin_tools/css/theming.css。 當我第一次運行python manage.py collectstatic時,它會按照預期工作,忽略admin_tools中的默認theming.css並使用我在static-media中定義的默認值。不幸的是,如果我再次運行該命令,它會覆蓋我的CSS並添加默認值。

這裏的輸出python manage.py findstatic admin_tools/css/theming.css

Found 'admin_tools/css/theming.css' here: 
    /home/paulo/Desktop/Projects/zennetwork/prd/zennetwork/static-media/admin_tools/css/theming.css 
    /home/paulo/Desktop/Projects/zennetwork/prd/lib/python2.7/site-packages/admin_tools/theming/static/admin_tools/css/theming.css 

任何幫助表示讚賞。謝謝。

回答

2

我升級到Django 1.4,現在問題已解決。

不太確定是什麼引起的。

7

Django docs只能說:

重複的文件名,默認情況下以類似的方式解決,如何解決模板工程:即首先在指定的位置之一找到該文件將被使用。如果您感到困惑,findstatic命令可以幫助顯示找到哪些文件。

根據您輸出的findstatic,第一個應該是您的自定義樣式,因此應該是收集的樣式。爲什麼它不這樣做是一個謎。

你總是可以直接忽略其他文件。這是一個有點痛,但它會保證你的風格不被覆蓋:

python manage.py collectstatic --ignore site-packages/admin_tools/css/theming.css 

如果您需要忽略其他文件,以及,你可以不斷加入--ignore <pattern>。儘管如此,這肯定不是一個非常可行的長期解決方案。