【问题标题】:Django can't find staticfiles with Debug=False and Allowed_HostsDjango 找不到带有 Debug=False 和 Allowed_Hosts 的静态文件
【发布时间】:2015-04-11 05:06:02
【问题描述】:

大家好,我无法解决这个问题:如果我将 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 或 * 的情况下工作。所以,我猜这个问题与调试有关。没看懂。

【问题讨论】:

    标签: django django-settings django-staticfiles


    【解决方案1】:

    DEBUG 模式下,Django 开发服务器会为您处理静态文件。但是,这对于生产来说并不是最好的,因为它比真正的服务器效率低得多。见here

    提供文件

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

    在开发过程中,如果你使用 django.contrib.staticfiles,这将在 DEBUG 设置为 True 时由 runserver 自动完成(参见 django.contrib.staticfiles.views.serve())。

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

    有关在生产环境中提供静态文件的适当策略,请参阅部署静态文件。

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

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

    我在我的根 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 错误页面,等等。

    【讨论】:

    • 好的,刚刚遇到同样的问题。应该如何测试我的 404.html / 500.html?如果调试为假,那么我得到错误,如果调试为真,那么我不会看到我的错误页面。 :(
    • 嘿@alejoss,我编辑了我的原始回复,以便您可以看到它的格式。如果您有任何问题,请告诉我。
    • 我遇到了这个问题,刚刚安装了whitenoise 来提供文件。虽然它从同一台服务器提供服务,但对于简单的应用程序来说,这似乎是一个很好的解决方案,因为您所要做的就是在 MIDDELWARE 设置中添加一行。
    【解决方案2】:

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

    manage.py runserver --insecure
    

    【讨论】:

    【解决方案3】:

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

    DEBUG = False
    DEBUG_PROPAGATE_EXCEPTIONS = True
    

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

    您可以查看日志中缺少的内容。在我的情况下,heroku 日志就足够了。

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

    【讨论】:

      猜你喜欢
      • 2017-01-20
      • 1970-01-01
      • 2016-11-26
      • 2019-06-01
      • 2012-11-27
      • 2020-10-27
      • 2012-09-28
      • 2016-11-13
      • 1970-01-01
      相关资源
      最近更新 更多