我正在尝试将Django配置为在使用 runserver 时提供静态文件(生产正常)。一切都适用于apps目录下的所有静态文件。问题来自不在特定应用程序下但位于最终静态目录中的静态文件。例如,我有这个项目结构:
/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',)
使用这些设置,我收到错误:
NotperlyConfigured:STATICFILES_DIRS设置不应包含 STATIC_ROOT设置
哪个有道理。我告诉Django收集静态文件,并将它们放在同一个地方 - 这可能会导致循环。
如果我注释掉STATICFILES_DIRS变量,django会找到静态文件'bar.css'。但它确实不找到'foo.css'。
如果我注释掉STATIC_ROOT变量并放回STATICFILES_DIRS,那么它会找到文件'foo.css' - 当然,'collectstatic'命令将不再有效。
注意 - 我意识到'/ static'目录应该是空的,但是我所在的项目,无论如何都有文件存在。 :)只要它们没有被'collectstatic'覆盖,看起来像Django runserver应该为它们服务 - 但事实并非如此。
运行Django runserver时,如何在STATIC_ROOT(例如foo.css)下提供静态文件?
答案 0 :(得分:5)
将/ static /中的文件立即移动到另一个目录 - 例如,调用它/ project-static /。
然后只在urls.py中包含这一行:
urlpatterns += staticfiles_urlpatterns()
(删除django.views.static.serve视图)
在settings.py中,请使用:
STATICFILES_DIRS = (os.path.join(PROJECT_ROOT, 'project-static'),)
然后你可以将/ project-static /目录中的文件放在你的文件系统上,开发服务器将用/ static / URL前缀提供它们,在生产中,collectstatic
会找到它们并将它们放入web服务器可以找到它们的/ static /目录。