2012-07-10 81 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>。尽管如此,这肯定不是一个非常可行的长期解决方案。