【问题标题】:Configuring Django runserver to serve static files in a non-app directory?配置 Django runserver 以在非应用目录中提供静态文件?
【发布时间】: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


【解决方案1】:

现在将 /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/ 目录。

【讨论】:

  • 哇,我忘了我有这个问题。 :) 看起来很合理,虽然还没有尝试过。基本上你是说/static/ 应该总是空的,它只是 collectstatic 的目的地?
猜你喜欢
  • 2013-12-22
  • 2016-10-13
  • 2012-12-14
  • 2012-09-08
  • 2013-04-16
  • 1970-01-01
  • 2020-04-18
  • 2020-08-02
  • 1970-01-01
相关资源
最近更新 更多