大家好我无法解决这个问题:如果我把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有关。我不明白。
答案 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'),
)
您可能需要更改一下(例如,如果您的模板名称不同,可能需要编辑400
和403
页面)。基本上,这可让您访问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