Django can';找不到Debug=False且允许的\u主机的静态文件

Django can';找不到Debug=False且允许的\u主机的静态文件,django,django-settings,django-staticfiles,Django,Django Settings,Django Staticfiles,您好,我在解决此问题时遇到问题:如果我将DEBUG设置为False,则无法运行manage.py runserver: CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False 然后,假设我向允许的\u主机添加了一些内容: ALLOWED_HOSTS = ['*'] or ALLOWED_HOSTS = ['localhost'] or ALLOWED_HOSTS = ['127.0.0.1', 'localhost

您好,我在解决此问题时遇到问题:如果我将DEBUG设置为False,则无法运行manage.py runserver:

CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False
然后,假设我向允许的\u主机添加了一些内容:

ALLOWED_HOSTS = ['*']
or
ALLOWED_HOSTS = ['localhost']
or
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
现在,我可以做“manage.py runserver”,但是静态文件不能工作。奇怪


如果我将DEBUG设置为True,那么它可以在允许的_主机设置为nothing、localhost或*的情况下工作。所以,我想问题与调试有关。我不明白。

DEBUG
模式下,Django开发服务器为您处理静态文件。然而,这并不适合生产,因为它比真正的服务器效率要低得多。看

提供文件

除了这些配置步骤之外,您还需要实际提供静态文件

在开发过程中,如果使用django.contrib.staticfiles,当DEBUG设置为True时,runserver将自动执行此操作(请参阅django.contrib.staticfiles.views.service()

这种方法效率极低,可能不安全,因此不适合生产

有关在生产环境中为静态文件提供服务的正确策略,请参阅部署静态文件

查看以了解如何在生产中为静态文件提供服务

编辑:添加以下内容以回答@Alejos关于使用DEBUG=True查看错误页面的问题

我在我的根
url.py
文件中添加了如下内容:

if settings.DEBUG:
    urlpatterns += patterns(
        '',
        url(r'^400/$', TemplateView.as_view(template_name='400.html')),
        url(r'^403/$', TemplateView.as_view(template_name='403.html')),
        url(r'^404/$', 'django.views.defaults.page_not_found'),
        url(r'^500/$', 'django.views.defaults.server_error'),
    )

您可能需要稍作修改(即,如果模板名称不同,则可能需要编辑
400
403
页面)。基本上,这允许您访问
http://localhost/400
要查看您的
400
错误页面,
http://localhost/403
查看您的
403
错误页面,依此类推。

如果您仍然需要本地服务器静态(例如,对于无调试的测试),您可以在不安全模式下运行devserver:

manage.py runserver --insecure

好的,这是非常干净的解决方案。你需要使用

DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = True
通过这种方式,您可以在日志中看到问题所在。Whitenoise通常在缺少某个文件时返回500

您可以查看日志中缺少的内容。就我而言,heroku日志就足够了


有关更多信息:

好的,遇到了相同的问题。我应该如何测试我的404.html/500.html?如果debug为false,则我会收到错误,如果debug为true,则我不会看到错误页面:(嘿@Alejos,我编辑了我的原始响应,以便您可以查看它的格式。如果您有任何问题,请告诉我。我遇到了这个问题,只是为了提供文件而安装的。虽然它是从同一台服务器提供服务的,但对于简单的应用程序来说,它似乎是一个很好的解决方案,因为您只需在
MIDDELWARE中添加一行代码即可
设置。原始答案: