django collectstatic overriding

Pau*_*ulo 6 python django django-staticfiles

我正在使用Django 1.3.1和contrib.collectstatic应用程序来管理我的静态文件.

我的项目结构是

myproject
    - settings.py
    - static-media
    - urls.py
    - media
    - manage.py
Run Code Online (Sandbox Code Playgroud)

其中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'),
)
Run Code Online (Sandbox Code Playgroud)

我正在使用admin_tools来更改管理员的布局.但是我想从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
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏.谢谢.

Chr*_*att 7

Django文档只能说:

默认情况下,重复文件名的解析方式与模板解析的工作方式类似:将首先使用在其中一个指定位置找到的文件.如果您感到困惑,findstatic命令可以帮助您显示找到的文件.

根据您findstatic的第一个输出应该是您的自定义样式,因此应该是收集的.为什么它不这样做是一个谜.

你总是可以明确地忽略其他文件.这有点痛苦,但它会保证你的风格不会被覆盖:

python manage.py collectstatic --ignore site-packages/admin_tools/css/theming.css
Run Code Online (Sandbox Code Playgroud)

如果您还需要忽略其他文件,则可以继续添加--ignore <pattern>.不过,这无疑是一个非常可行的长期解决方案.