6

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

我的项目结构是

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

wherestatic-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_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

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

4

2 回答 2

7

Django 文档只说:

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

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

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

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

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

于 2012-07-10T19:05:42.083 回答
3

我升级到 Django 1.4,现在问题已解决。

虽然不太清楚是什么原因造成的。

于 2012-07-18T00:36:56.247 回答