2011-06-21 88 views
1

我有几个自定义样式表,它们会覆盖默认的管理样式。他们住在myproject/static/admin/css-extended。我用覆盖“myproject/templates/admin”中的模板覆盖了Django的几个默认管理模板。Django自定义样式表(1.3)admin

在我的样式表引用的模板中:{{ STATIC_URL }}/admin/css-extended/[stylesheet].css

但是,我不能让自定义样式表通过。

我得在settings.py以下网址相关的设置:

MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media') 
MEDIA_URL = '/media/' 
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static') 
STATIC_URL = '/static/' 
ADMIN_MEDIA_PREFIX = '/static/admin/' 

我有下面列出的模板context处理器:

'django.core.context_processors.media', 
'django.core.context_processors.static', 

谁能帮助吗?

感谢

UPDATE:

我怀疑这个问题有事情做的事实,我ADMIN_MEDIA_PREFIX相同的CSS扩展URL('/static/admin')的第一部分。我猜Django试图在核心管理员中找到一个名为'css-extended'的目录,而不是项目本身。但是,我该如何解决这个问题?

回答

1

你在本地开发环境(使用runserver)时是否遇到了这个问题?如果是这样,你的urls.py中有以下内容吗?

from django.contrib.staticfiles.urls import staticfiles_urlpatterns 

# ... the rest of your URLconf goes here ... 

urlpatterns += staticfiles_urlpatterns() 

阅读Django Docs了解更多。

+0

是的,我使用的是runserver。根据您提到的文档,只需要添加这些额外的行,如果您使用内置开发服务器以外的其他软件提供静态文件。 – user166508

+0

好点。您是否查看了页面源代码,以了解{{STATIC_URL}}如何在模板中呈现? –

+0

是的,'/静态/'。 – user166508

1

好吧,我现在想我知道这里发生了什么。希望这将阐明:

STATIC_ROOT仅由“collectstatic”管理命令使用,以确定将其收集的静态文件转储到何处。

STATIC_URL被dev服务器用来定义静态文件将被提供的URL。

您尚未设置的STATICFILES_DIRS被dev服务器和“collectstatic”管理命令用于标识要提供服务的静态文件的位置。在开发服务器的情况下,这些文件直接就地提供。在管理命令的情况下,文件被收集并复制到STATIC_ROOT中。

[注:这里有一个约定 - 如果你在你的应用程序(而不是项目)有/静态子目录,他们会在STATICFILES_DIRS明确定义什么一起拿起]

你只需要将以下内容添加到settings.py:

STATICFILES_DIRS = { 
     '/absolute/path/to/myproject/static/', 
} 
+0

我已经试过了。它会引发以下错误:'错误配置:STATICFILES_DIRS设置不应包含STATIC_ROOT设置'。 – user166508

+0

啊,解决了!我只是将STATIC_ROOT的值更改为'absolute/path/to/myproject/staticfiles',而不是'absolute/path/to/myproject/static',以避免该错误。据推测,STATIC_ROOT的目录名称可以是任何你喜欢的...(我还没有在生产服务器上测试过它)? – user166508

+0

如果我理解它是正确的(只需一个星期使用Django,所以我很抱歉,如果我错了),STATIC_ROOT路径只是一个绝对路径,当您从manage.py运行命令时,静态文件将到达的位置,而不是静态文件目录本身。在STATIC_ROOT配置行之上的注释确实如此,您甚至不应该将自己的任何文件放在该目录中,因为它是为“collectstatic”管理功能收集的文件保留的 –