我正在尝试将 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',)
使用这些设置,我得到错误:
ImproperlyConfigured: The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
这是有道理的。我告诉 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)?
最佳答案
现在将/static/中的文件移动到另一个目录——例如,将其命名为/project-static/。
然后只在 urls.py 中包含这一行:
urlpatterns += staticfiles_urlpatterns()
(删除 django.views.static.serve View )
在 settings.py 中,使用这个:
STATICFILES_DIRS = (os.path.join(PROJECT_ROOT, 'project-static'),)
然后您可以将文件放在文件系统的/project-static/目录中,开发服务器将通过/static/URL 前缀为它们提供服务,而在生产中,collectstatic
将找到它们并将它们放入 Web 服务器可以找到它们的/static/目录中。
关于django - 配置 Django runserver 以在非应用程序目录中提供静态文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12410043/