Django无法找到Debug = False和Allowed_Hosts的静态文件

时间:2015-02-10 23:39:40

标签: django django-settings django-staticfiles

大家好我无法解决这个问题:如果我把DEBUG变为False,我就无法运行manage.py runserver:

CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False

然后,假设我在ALLOWED_HOSTS中添加了一些东西:

ALLOWED_HOSTS = ['*']
or
ALLOWED_HOSTS = ['localhost']
or
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

现在,我可以执行'manage.py runserver',但静态文件不起作用。怪异。

如果我将DEBUG转为True,那么它将ALLOWED_HOSTS设置为空,localhost或*。所以,我猜这个问题与DEBUG有关。我不明白。

3 个答案:

答案 0 :(得分:10)

DEBUG模式下,Django开发服务器为您处理服务静态文件。但是,这不适合生产,因为它比真正的服务器效率低得多。请参阅here

  

提供文件

     

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

     

在开发期间,如果使用django.contrib.staticfiles,当DEBUG设置为True时,这将由runserver自动完成(请参阅django.contrib.staticfiles.views.serve())。

     

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

     

请参阅部署静态文件以获取在生产环境中提供静态文件的正确策略。

查看here以了解如何在生产中提供静态文件。

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

我在我的根urls.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'),
    )

您可能需要更改一下(例如,如果您的模板名称不同,可能需要编辑400403页面)。基本上,这可让您访问http://localhost/400以查看400错误页面,http://localhost/403以查看您的403错误页面,等等。

答案 1 :(得分:4)

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

manage.py runserver --insecure

答案 2 :(得分:0)

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

DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = True

通过这种方式,您可以在日志中查看问题所在。通常,Whitenoise在丢失某些文件时会返回500。

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

有关更多信息:https://docs.djangoproject.com/en/2.0/ref/settings/#debug-propagate-exceptions