【发布时间】:2012-09-06 18:20:27
【问题描述】:
我正在尝试将 Django 配置为在使用 runserver 时提供静态文件(生产工作正常)。一切都适用于应用程序目录下的所有静态文件。问题来自不在特定应用程序下但位于最终 static 目录中的静态文件。例如,我有这个项目结构:
/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)?
【问题讨论】:
-
如果你在开发中运行服务器,你需要将
STATIC_ROOT更改为static_fake这样的假目录。STATICFILES_DIRS必须是包含静态文件的真实目录。
标签: django