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

Ale*_*lla 8 django django-settings django-staticfiles

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

CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False
Run Code Online (Sandbox Code Playgroud)

然后,假设我向ALLOWED_HOSTS添加了一些内容:

ALLOWED_HOSTS = ['*']
or
ALLOWED_HOSTS = ['localhost']
or
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
Run Code Online (Sandbox Code Playgroud)

现在,我可以做'manage.py runserver',但静态文件不起作用.奇怪的.

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

Ale*_*lex 10

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

提供文件

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

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

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

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

请查看此处以了解如何在生产中提供静态文件.

编辑:添加以下内容以回答有关使用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'),
    )
Run Code Online (Sandbox Code Playgroud)

您可能需要改变一个位(即400403页面可能需要进行编辑,如果你的模板名称不同).基本上,这可让您访问http://localhost/400以查看400错误页面,http://localhost/403查看403错误页面等.


小智 5

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

manage.py runserver --insecure
Run Code Online (Sandbox Code Playgroud)