django - 配置 Django runserver 以在非应用程序目录中提供静态文件?

标签 django

我正在尝试将 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/

相关文章:

python - 为什么当我交换 url 模式成员的顺序时错误会有所不同

python - 为什么 Python/Django 会创建重复文件

python - “No URL to redirect to” 如何重定向到django同一页面

python - 合并排序查询集 - django

python - 是否可以从请求内部访问模块或 View 类

HTML PNG透明图片

python - Django NoReverseMatch : trying to get slug in a template

django - 保护 EC2 Amazon Marketplace AMI 上的文件夹

django oscar send_email 结果出现 ValueError : EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive,

python - 使用 Django Haystack 添加 ElasticSearch 同义词