我正在使用Django 1.3.1和contrib.collectstatic
应用来管理我的静态文件。
我的项目结构是
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_tools覆盖特定的css文件(theming.css)。所以在我的静态媒体文件夹中我放了admin_tools / css / theming.css。
当我第一次运行python manage.py collectstatic
时,它会按预期工作,忽略admin_tools中的默认的theming.css并使用我在静态媒体中定义的那个。不幸的是,如果我再次运行该命令,它会覆盖我的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
感谢任何帮助。感谢。
答案 0 :(得分:7)
Django docs只说:
默认情况下,重复文件名的解析方式与模板解析的工作方式类似:将首先使用在其中一个指定位置找到的文件。如果您感到困惑,findstatic命令可以帮助您显示找到的文件。
根据findstatic
的输出,第一个应该是您的自定义样式,因此应该是收集的样式。为什么不这样做是个谜。
您可以随时忽略其他文件。这有点痛苦,但它可以保证你的风格不会被覆盖:
python manage.py collectstatic --ignore site-packages/admin_tools/css/theming.css
如果您还需要忽略其他文件,则可以继续添加--ignore <pattern>
。不过,这无疑是一个非常可行的长期解决方案。
答案 1 :(得分:2)
我已升级到Django 1.4,问题现已解决。
不太确定是什么造成的。