17

我正在创建一个 Django 项目。我刚刚尝试将项目退出调试,DEBUG = False但由于某种原因,我的所有静态文件都没有显示出来。他们给出的错误代码为 500。我该如何解决这个问题?

一些settings.py:

DEBUG = True
TEMPLATE_DEBUG = DEBUG
...
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
#    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)
4

2 回答 2

36

DEBUG=False静态文件应用程序不会在模式下自动提供静态媒体。来自django.contrib.staticfiles.urls

# Only append if urlpatterns are empty
if settings.DEBUG and not urlpatterns:
    urlpatterns += staticfiles_urlpatterns()

您可以通过urlpatterns手动附加或使用服务器来提供静态文件来提供它(就像在非调试模式下运行 Django 项目时应该提供的那样)。

虽然我想知道的一件事是为什么你得到一个 500 状态码响应而不是 404。在这种情况下有什么例外?

编辑

因此,如果您仍想通过 staticfiles 应用程序提供静态文件,请将以下内容添加到您的根 url conf ( urls.py) 中:

if settings.DEBUG is False:   #if DEBUG is True it will be served automatically
    urlpatterns += patterns('',
            url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),
    )

不过,您需要记住一些事情:

  • 不要在生产环境中使用它(它的速度较慢,因为静态文件呈现通过 Django 而不是由您的 Web 服务器直接提供服务)
  • 您很可能必须使用管理命令将静态文件收集到您的STATIC_ROOT( manage.py collectstatic) 中。有关更多信息,请参阅staticfiles 应用程序文档。这是必要的,因为您在非调试模式下运行。
  • 不要忘记from django.conf import settings你的urls.py:)
于 2011-06-20T02:54:36.680 回答
12

在 Django 1.3 中,如果您只是使用 manage.py 运行服务器进行测试,您可以添加选项“--insecure”,如staticfiles 文档中所述:

它似乎仍然向管理员发送电子邮件说没有模板,但它确实提供静态文件。

我不确定电子邮件问题是故意还是错误

于 2011-09-14T16:37:49.903 回答