我正在尝试将 Django 配置为在使用runserver时提供静态文件(生产工作正常)。一切都适用于应用程序目录下的所有静态文件。问题来自不在特定应用程序下但位于最终静态目录中的静态文件。例如,我有这个项目结构:
/myproject/
/myproject/static/
/myproject/static/css/foo.css
/myproject/app1
/myproject/app1/static/css/bar.css
urls.py
if settings.SERVE_STATIC:
urlpatterns += patterns('',
url(r'^static/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.STATIC_ROOT}),
)
urlpatterns += staticfiles_urlpatterns() # one of these may be redundant.
settings.py
SERVE_STATIC = True
PROJECT_ROOT = '/myproject'
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(PROJECT_ROOT, 'static'),)
INSTALLED_APPS = ('app1',)
使用这些设置,我得到错误:
配置不当:STATICFILES_DIRS 设置不应包含 STATIC_ROOT 设置
这是有道理的。我告诉 Django 收集静态文件,并将它们放在同一个地方——这可能会导致循环。
如果我注释掉 STATICFILES_DIRS 变量,django 将找到静态文件“bar.css”。但它没有找到'foo.css'。
如果我注释掉 STATIC_ROOT 变量并放回 STATICFILES_DIRS,那么它会找到文件“foo.css”——当然,“collectstatic”命令将不再起作用。
注意 - 我意识到“/静态”目录应该是空的,但我所在的项目无论如何都有文件。:) 只要它们没有被“collectstatic”覆盖,看起来 Django runserver 应该为它们服务——但事实并非如此。
运行 Django runserver 时,如何提供 STATIC_ROOT 下的静态文件(例如 foo.css)?