【问题标题】:Setting DEBUG = False causes 500 Error设置 DEBUG = False 会导致 500 错误
【发布时间】:2013-02-14 04:58:16
【问题描述】:

一旦我更改DEBUG = False,我的网站将生成500(使用wsgi & manage.py runserver),并且Apache错误日志中没有错误信息,当我将debug更改为@987654324时它将正常运行@.

我正在使用 Django 1.5 和 Python 2.7.3 这是 Apache 访问日志,没有任何日志在 apache 错误日志中

www.beta800.net:80 222.247.56.11 - - [28/Feb/2013:13:42:28 +0800] "GET / HTTP/1.1" 500 257 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22"
www.beta800.net:80 222.247.56.11 - - [28/Feb/2013:13:42:28 +0800] "GET /favicon.ico HTTP/1.1" 500 257 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22"
www.beta800.net:80 222.247.56.11 - - [28/Feb/2013:13:42:28 +0800] "GET /favicon.ico HTTP/1.1" 500 257 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22"

这是我的设置文件:

import os.path    
DEBUG = False 
#TEMPLATE_DEBUG = DEBUG

HERE = os.path.dirname(__file__)
ADMINS = (
    ('admin', 'xyzadmin@qq.com'),
)

MANAGERS = ADMINS

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'zdm',                      # Or path to database file if using sqlite3.
        'USER': 'root',                      # Not used with sqlite3.
        'PASSWORD': 'passwd',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'America/Chicago'

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = True

# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True

# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = ''

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
MEDIA_URL = ''

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
#STATIC_ROOT = os.path.join(HERE, 'static').replace('\\','/')

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'
#STATIC_ROOT = os.path.join(HERE, 'static').replace('\\','/')
S= os.path.join(HERE, 'static').replace('\\','/')

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    '/home/zdm/static',
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

# Make this unique, and don't share it with anybody.
SECRET_KEY = '9a7!^gp8ojyk-^^d@*whuw!0rml+r+uaie4ur$(do9zz_6!hy0'

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'zdm.urls'

# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'zdm.wsgi.application'

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    '/home/zdm/templates',
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'zdm',
    'portal',
    'admin',
    'tagging',
)

【问题讨论】:

  • 是的,我在模板目录中添加了 403 和 404 500 html 文件
  • 您有 500.html 和 404.html 和 403.html 文件吗?我想我记得在我的模板目录的根目录中没有这些文件的已部署项目存在问题。
  • 如果您的网站生成 500 错误,则 apache 日志中应该有一些信息,您可能希望将错误日志文件末尾的一部分内容传递给人们查看。
  • 您可能想要更改您的 SECRET_KEY,因为它是公开可用的...
  • 这不是每个人的答案。如下图stackoverflow.com/a/37218484/4028977 所示,发生这种情况的原因可能有很多。通过一些简单的日志记录,您无需猜测即可找出答案。

标签: django settings django-1.5


【解决方案1】:

出于安全原因,Django 1.5 引入了allowed hosts setting。使用 Django 1.5 创建的设置文件有这个新部分,您需要添加:

# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.9/ref/settings/#allowed-hosts
ALLOWED_HOSTS = []

在此处添加您的主机,例如 ['www.beta800.net']['*'] 以进行快速测试,but don't use ['*'] for production

【讨论】:

  • 哇——这让我们很难受。这个设置被隐藏在文档中真的很糟糕。我们的生产站点无法使用 DEBUG = False。感谢您指出这一点!!!
  • 更多关于引入此设置的安全问题:Practical HTTP Host header attacks。肯定会说服您不要在生产中使用['*']
  • bl。令人讨厌的是,他们甚至没有将其作为默认值粘贴到 settings.py 中,可能带有解释性注释...
  • 有时我想知道为什么 Django 变得越来越迟钝!当然,这些人是比我更好的程序员,但我真的不理解在应用程序级别“修复”漏洞的决定,而真正干净的举措是正确配置服务器。 “模板缓存”和“持久连接”也是如此……在严肃的网站中永远不会使用的无用代码;仍然被视为编程的圣杯!也许只是我,我以前错了!
  • 没关系,找到问题了。这与django-pipeline 在静态尚未收集时的行为有关。作为一般提示,在 Django 的 handle_uncaught_exception 方法中放置一个断点将帮助您弄清楚这里发生了什么。
【解决方案2】:

我知道这已经晚了,但我最终在这里使用DEBUG=False 搜索我的错误 500,在我的情况下,它确实是 ALLOWED_HOSTS,但我使用 os.environ.get('variable') 填充主机,在启用日志记录之前我没有注意到这一点,您可以使用以下内容将所有错误记录到文件中,即使DEBUG=False

# settings.py
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt' : "%d/%b/%Y %H:%M:%S"
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': 'mysite.log',
            'formatter': 'verbose'
        },
    },
    'loggers': {
        'django': {
            'handlers':['file'],
            'propagate': True,
            'level':'DEBUG',
        },
        'MYAPP': {
            'handlers': ['file'],
            'level': 'DEBUG',
        },
    }
}

【讨论】:

  • 这应该是公认的答案。在使用生产设置后简单地询问框架本身出了什么问题,而不是试图猜测会更有用。
  • 确实,这不是在黑暗中徘徊的东西。只需查看使用此方法通常会看到的错误消息。就我而言,我在我的 settings.py 中缺少我的应用程序正在寻找的不同设置。我所需要的只是追踪这件事的日志。一个重要说明:我在“mysite.log”之前添加了/path/to/my/django/,如文档示例所示:docs.djangoproject.com/en/1.10/topics/logging/#examples
  • 我花了几个小时寻找解决方案,但没有用。根据这个答案,只需使用日志记录,你应该有你的问题,这是最好的答案。谢谢奥普!
  • 谢谢!这解决了我的错误。原来我需要运行 collectstatic 从包中收集一些静态资产。
  • @Gorgonzola,如果您的团队中有系统管理员,欢迎您。他们最擅长排除权限被拒绝的问题。就像我说的那样,有很多事情会阻碍。
【解决方案3】:

我最近在 Django 2.0 中遇到了同样的问题。我能够通过设置DEBUG_PROPAGATE_EXCEPTIONS = True 找出问题所在。见这里:https://docs.djangoproject.com/en/2.0/ref/settings/#debug-propagate-exceptions

就我而言,错误是ValueError: Missing staticfiles manifest entry for 'admin/css/base.css'。我通过在本地运行 python manage.py collectstatic 解决了这个问题。

【讨论】:

  • 我做了同样的事情,但 collectstatic 并没有为我解决这个问题。您是否收到“无法到达错误”?在那种情况下,你是如何解决的?
  • 为什么这么低?无论错误的原因是什么,这都会有所帮助。
  • 这应该是“如何在 Django 中调试 500 错误”问题的答案。
【解决方案4】:

就我而言,阅读第三方应用程序的文档正确地救了我。

罪魁祸首? django_compressor

我有

{% load compress %}
{% compress css %}
 ... css files linked here ..
{% endcompress %}

DEBUG = True 总是给我 500。要修复它,我需要在设置中添加一行以使其运行

COMPRESS_ENABLED = os.environ.get('COMPRESS_ENABLED', False)

【讨论】:

  • 谢谢,这就是它对我不起作用的原因,但那行不是禁用 django_compressor 的工作吗?
  • @Fanckush 不。不涉及任何伤害。 django-compressor.readthedocs.io/en/latest/settings/… Compressor 仍然可以完美地完成它的工作!只需压缩所有静态数据(如 css),这样设置就没有用了,因为您的资产已经被压缩了
【解决方案5】:

对,在 Django 1.5 中,如果 DEBUG = False,配置 ALLOWED_HOSTS,添加不带端口号的域。示例:

ALLOWED_HOSTS = ['localhost']

【讨论】:

  • 无论出于何种原因,使用 'localhost' 对我不起作用。我不得不改用 IP '127.0.0.1'。如果你吓坏了并且只想让它工作,我也可以使用'*'。但是,我不建议在生产中这样做。 OSX 运行 Django 1.4.20
【解决方案6】:

您还必须到处检查您的网址。当DEBUG 设置为False 时,所有没有尾随/ 的URL 都被视为一个错误,这与DEBUG = True 不同,在这种情况下,Django 将在它丢失的任何地方附加/。因此,简而言之,请确保所有链接都以斜线结尾。

【讨论】:

  • 只要使用反向和url标签就可以了
  • 设置DEBUG=False 也可以发现导入错误:stackoverflow.com/questions/25676453/…
  • 甚至链接到 js 和 css 资产?
  • @amchugh89:不,只是“django”网址
  • 我的问题是 whitenoise 无法找到一些图像并抛出 ValueError。我也找不到它,但不知道如何告诉白噪声不要寻找它。所以我关闭了白噪声,使用 django 静态服务,现在我可以在 prod 中运行 debug=False。显然不理想:(
【解决方案7】:

补充主要答案
在开发和生产之间切换时,更改settings.py 中的 ALLOWED_HOSTS 和 DEBUG 全局常量很烦人。 我正在使用此代码自动设置这些设置:

import socket

if socket.gethostname() == "server_name":
    DEBUG = False
    ALLOWED_HOSTS = [".your_domain_name.com",]
    ...
else:
    DEBUG = True
    ALLOWED_HOSTS = ["localhost", "127.0.0.1",]
    ...

如果您使用 macOS,您可以编写更通用的代码:

if socket.gethostname().endswith(".local"): # True in your local computer
    DEBUG = True
    ALLOWED_HOSTS = ["localhost", "127.0.0.1",]
else:
    ...

【讨论】:

    【解决方案8】:

    2019 年年中,在使用 Django 开发几年后,我遇到了这个错误。让我迷惑了一晚上!不允许主机(应该抛出 400),检查其他所有内容,最后做了一些错误记录,只是发现一些丢失/或弄乱的静态文件清单(在 collectstatic 之后)正在搞砸设置。长话短说,对于那些正在使用 WHITENOISE 或带有缓存(清单静态文件)的 DJANGO STATICFILE 后端的人来说,也许这是给你的。

    1. 确保您设置了所有内容(就像我为 whitenoise 后端所做的那样...django 后端继续阅读)http://whitenoise.evans.io/en/stable/django.html

    2. 如果错误代码 500 仍然让您失望,请记下您的设置。STATICFILES_STORAGE。

    将其设置为任一(用于带压缩的白噪声后端)

    STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'
    

    或(保留为 django 默认值)

    STATICFILES_STORAGE = django.contrib.staticfiles.storage.StaticFilesStorage
    

    总而言之,问题似乎来自于这个白噪声缓存 + 压缩后端 -->

    STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
    

    或 django 自己的缓存后端 -->

    STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'
    

    ...对我来说效果不佳,因为我的 css 引用了一些其他来源,这些来源可能在 collectstatic / 后端缓存期间混淆。 http://whitenoise.evans.io/en/stable/django.html#storage-troubleshoot

    中也可能强调了此问题

    【讨论】:

    • 改成这个 - whitenoise.storage.CompressedStaticFilesStorage - 对我有用。
    【解决方案9】:

    我有一个有趣的故事。到达此页面后,我说“尤里卡!我得救了。这一定是我的问题。”所以我在 setting.py 中插入了所需的ALLOWED_HOSTS 列表,然后......什么也没有。相同的旧 500 错误。不,不是因为缺少 404.html 文件。

    所以这 2 天我忙于各种疯狂的理论,例如它与提供静态文件有关(理解我是菜鸟,菜鸟不知道他们在做什么)。

    那是什么?现在是主持人先生,我们来了一个有用的提示。而我的开发 Django 版本是 1.5.something,我的生产服务器版本是 1.5.something+1... 或者可能加 2。随便。因此,在我将ALLOWED_HOSTS 添加到 settings.py 的桌面版本后,它缺少 hwjp 要求的内容——“settings.py 中的默认值,可能带有解释性注释”—— - 我在生产服务器上做了同样的事情,并为其设置了正确的域。

    但我没有注意到在具有更高版本 Django 的生产服务器上,settings.py 中有一个带有解释性注释的默认值。它远低于我进入的地方,在监视器上看不见。当然,列表是空的。因此我浪费了时间。

    【讨论】:

    • 我有完全相同的搞笑模式!只是在我发现这个之后才变得很搞笑,谢谢。在此之前,这简直令人沮丧
    • 对所有这些都有帮助的方法是为每个环境使用local_settings.py,然后将其导入settings.py
    • 我喜欢做的是有一个 settings/ 目录 而不是 settings.py。在此目录中,您可以拥有用于不同环境的单独 .py 文件,以及用于常规设置的 base.py。然后,可以通过从基本设置导入 * 来开始生产相关设置,然后覆盖他们需要覆盖的任何内容。此外,将 settings/ 目录转换为有效模块所需的 init.py 可以先从 base.py 导入,然后尝试从 local.py 导入(它只存在于本地)。这意味着您不需要手动指定本地设置
    【解决方案10】:

    我正在搜索和测试有关此问题的更多信息,我意识到 settings.py 中指定的静态文件目录可能是导致此问题的原因,所以首先,我们需要运行此命令

    python manage.py collectstatic
    

    在 settings.py 中,代码应如下所示:

    STATIC_URL = '/static/'
    
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
    )
    
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    

    【讨论】:

      【解决方案11】:

      ALLOWED_HOSTS 不是唯一的问题,对我来说,我必须制作一个 404.html 并将其放在我的模板的基本级别(不是应用程序级别) - 此外,您可以制作一个 404 视图并添加一个 404handler url 但是我认为那是可选的。 404.html 修复了它

      在 mainproject.urls 中

      handler404 = 'app.views.custom_404'
      

      在 app.views 中

      def custom_404(request):
          return render(request, '404.html', {}, status=404)
      

      然后制作一个templates/404.html模板

      从另一个我找不到的 S/O 帖子得到这个

      编辑

      另外,当我提供带有白噪声的资产时,我得到了 500 个错误。在我的一生中无法弄清楚,错误是 Whitenoise 的 ValueError 无法找到我也找不到的资产,现在不得不使用默认的 django 服务

      【讨论】:

      • 我在白噪声方面遇到了同样的问题。 python manage.py collectstatic 已修复。
      • @amchungh89 你是救生员!感谢您指出这一点。
      【解决方案12】:

      对于它的价值 - 我只在某些页面上获得了 500 分 DEBUG = False。用 pdb 追溯异常发现了一个缺失的资产(我怀疑 {% static ... %} 模板标签是 500 的罪魁祸首。

      【讨论】:

      • 这也是我的问题,自定义 404 页面引用的基本模板使用了静态标签,但顶部没有包含 {% load static %}。我没有在其他地方注意到它,因为我的其他模板有这一行,但无论如何将它放在基础中是有意义的,因为它引用了整个地方的静态文件。
      • 这里的解决方案相同 - 我使用 static 包含一个不存在的 CSS 文件。
      【解决方案13】:

      我知道这是一个非常古老的问题,但也许我可以帮助其他人。如果您在设置 DEBUG=False 后遇到 500 错误,您可以随时在命令行中运行 manage.py runserver 以查看不会出现在任何 Web 错误日志中的任何错误。

      【讨论】:

        【解决方案14】:

        我在DEBUG = FALSE 时遇到了同样的问题。这是一个综合解决方案,分散在上面的答案和其他帖子中。

        默认情况下,在 settings.py 我们有 ALLOWED_HOSTS = [] 。以下是您必须根据场景对 ALLOWED_HOSTS 值进行的更改以消除错误:

        1:您的域名:

        ALLOWED_HOSTS = ['www.example.com'] # Your domain name here
        

        2:如果您还没有域名,则您部署的服务器 IP(这是我的情况,就像一个魅力):

        ALLOWED_HOSTS = ['123.123.198.123'] # Enter your IP here
        

        3:如果您在本地服务器上进行测试,您可以将settings.pysettings_local.py 编辑为:

        ALLOWED_HOSTS = ['localhost', '127.0.0.1']
        

        4:您也可以在ALLOWED_HOSTS 值中提供'*',但出于安全原因,不建议在生产环境中使用

        ALLOWED_HOSTS = ['*'] # Not recommended in production environment
        

        我还在我的blog 上发布了详细的解决方案,您可能需要参考。

        【讨论】:

          【解决方案15】:

          settings.py 中设置DEBUG = FalseALLOWED_HOSTS = ['127.0.0.1'] 后,您可能希望运行python manage.py collectstatic。在这两个步骤之后,即使在 DEBUG=False 模式下,我的 Web 应用程序也可以在我的本地服务器上运行良好。

          顺便说一句,我在settings.py 中有这些设置。

          MIDDLEWARE = [
              'django.middleware.security.SecurityMiddleware',
              'whitenoise.middleware.WhiteNoiseMiddleware', # what i added
              'django.middleware.common.CommonMiddleware', # and so on...
          ]
          
          STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
          

          我假设白噪声设置可能与 collectstatic 命令有关。

          【讨论】:

            【解决方案16】:

            我有类似的问题,在我的情况下,它是由于在 body 标记内有一个 Commented 脚本引起的。

            <!--<script>  </script>-->
            

            【讨论】:

              【解决方案17】:

              这可能对其他人有帮助,在我的情况下是缺少图标的问题。

              【讨论】:

                【解决方案18】:

                我知道这篇文章已经很老了,但它今天仍然完全相关。

                对于它的价值 - 我的网站上的所有页面都获得了 500 分,DEBUG = False

                我在调试时没有回溯。

                我必须浏览我网站内模板中的每个静态链接,并在我的图像源前面找到一个 /(正斜杠)。 {% 静止的 ... %}。这导致了DEBUG = False 中的 500 错误,但在Debug = True 中工作得非常好,没有错误。很烦人!被警告!由于正斜杠浪费了许多时间......

                【讨论】:

                • 哇!感谢您节省时间。我有一个指向不存在文件的静态标签,并在Debug=False 上抛出 500。
                【解决方案19】:

                我认为这也可能是 http 服务器设置。我的仍然坏了,一直都有 ALLOWED_HOSTS 。我可以在本地访问它(我使用 gunicorn),但当 DEBUG=False 时不能通过域名访问。当我尝试使用域名时,它给了我错误,所以让我认为这是一个与 nginx 相关的问题。

                这是我的 nginx 配置文件:

                server {
                    listen   80;
                    server_name localhost myproject.ca www.myproject.ca;
                    root /var/web/myproject/deli_cms;
                
                    # serve directly - analogous for static/staticfiles
                    location /media/ {
                        # if asset versioning is used
                        if ($query_string) {
                            expires max;
                        }
                    }
                    location /admin/media/ {
                        # this changes depending on your python version
                        root /var/web/myproject/lib/python2.6/site-packages/django/contrib;
                    }
                    location /static/ {
                    alias /var/web/myproject/deli_cms/static_root/;
                    }
                
                    location / {
                        proxy_pass_header Server;
                        proxy_set_header Host $http_host;
                        proxy_redirect off;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Scheme $scheme;
                        proxy_connect_timeout 10;
                        proxy_read_timeout 10;
                        proxy_pass http://localhost:8000/;
                    }
                    # what to serve if upstream is not available or crashes
                    error_page 500 502 503 504 /media/50x.html;
                }
                

                【讨论】:

                • 我的 gunicorn 配置文件如下:#!/bin/bash cd /var/web/delicms_env/deli_cms/ source ../bin/activate exec gunicorn --workers=3 deli_cms.wsgi:应用
                • 我的问题现在解决了,我使用的是 gunicorn_django 脚本,它给了我不推荐使用的消息。仍然不确定为什么它在本地工作,没有更改我的 nginx 配置只是将旧脚本更改为使用 gunicorn 并使用 wsgi:application 模块,它再次工作。 Gunicorn 在此之前也抛出了一些弃用消息,但没有针对我的问题。
                【解决方案20】:

                聚会有点晚了,当然可能会有很多问题,但我遇到了类似的问题,结果发现我的 html 备注中有 {% %} 个特殊字符...

                <!-- <img src="{% static "my_app/myexample.jpg" %}" alt="My image"/> -->
                

                【讨论】:

                  【解决方案21】:

                  我遇到了这个问题。原来我使用static 模板标签包含在模板中,这是一个不再存在的文件。查看日志向我显示了问题。

                  我想这只是导致此类错误的众多可能原因之一。

                  故事的寓意:始终记录错误并始终检查日志。

                  【讨论】:

                    【解决方案22】:

                    感谢@squarebear,在日志文件中,我发现了错误: ValueError: The file 'myapp/styles.css' could not be found with &lt;whitenoise.storage.CompressedManifestStaticFilesStorage ...&gt;

                    我的 django 应用程序出现了一些问题。我删除了从heroku 的文档中找到的
                    STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' 行。

                    我还必须在 django 应用程序的根目录中添加额外的目录(感谢another SO answerstaticmyapp/static,即使我没有使用它。然后在运行服务器之前运行命令python manage.py collectstatic 解决了问题。最后,它开始正常工作了。

                    【讨论】:

                    • 这如何回答原来的问题?
                    【解决方案23】:

                    我开始以

                    的形式获取 debug=False 的 500
                    django.urls.exceptions.NoReverseMatch: Reverse for 'home' not found.
                    or...
                    django.urls.exceptions.NoReverseMatch: Reverse for 'about' not found.
                    

                    当引发 django.core.exceptions.ValidationError 而不是引发 rest_framework.serializers.ValidationError

                    公平地说,它之前已经提高了 500,但是作为 ValidationError,debug=False,这变成了 NoReverseMatch。

                    【讨论】:

                      【解决方案24】:

                      我知道这是一个老问题,但当 DEBUG=False 时我也收到 500 错误。几个小时后,我意识到我忘记在我的 base.html 中用斜杠结束一些链接。

                      【讨论】:

                      • 即使是css和js的东西?
                      【解决方案25】:

                      这是旧的,我的问题最终与问题有关,但与 OP 无关,但我的解决方案适用于尝试上述方法无济于事的其他人。

                      我在 Django 的修改版本中有一个设置来缩小仅在 DEBUG 关闭时运行的 CSS 和 JS 文件。我的服务器没有安装 CSS minifier 并抛出了错误。如果您使用的是 Django-Mako-Plus,这可能是您的问题。

                      【讨论】:

                        【解决方案26】:

                        有一点需要注意,如果数组里面有None,那么后面所有允许的主机都会被忽略。

                        ALLOWED_HOSTS = [
                            "localhost",
                            None,
                            'example.com', # First DNS alias (set up in the app)
                            #'www.example.com', # Second DNS alias (set up in the app)
                        ]
                        

                        Django version 1.8.4

                        【讨论】:

                          【解决方案27】:

                          我有一个视图在 debug=false 中引发 500 错误,但在 debug=true 中有效。对于遇到这种情况并且允许的主机不是问题的任何人,我通过更新指向错误位置的模板的静态标签来修复我的观点。

                          所以我建议只检查使用的任何模板中的链接和标签是否密封,也许某些东西在调试时会漏网,但在生产中会出错。

                          【讨论】:

                            【解决方案28】:

                            当 DEBUG=False 时,我发现了另一个导致 500 错误的原因。我使用 Django compressor 实用程序,我们的前端工程师在 Django 模板中的 compress css 块中添加了对字体文件的引用inside。像这样:

                            {% compress css %}
                                <link href="{% static "css/bootstrap.css" %}" rel="stylesheet">
                                <link href="{% static "css/bootstrap-spinedit.css" %}" rel="stylesheet">
                                <link href="{% static "djangular/css/styles.css" %}" rel="stylesheet">
                                <link href="{% static "fonts/fontawesome-webfont.ttf" %}" rel="stylesheet">
                            {% endcompress %}
                            

                            解决方案是将链接移至ttf 文件的endcompress 行下方。

                            【讨论】:

                              【解决方案29】:

                              我遇到了类似的问题,我将报告我是如何解决我的问题的,因为可能有人也遇到了同样的问题。

                              在我的情况下,错误是因为服务器没有从主页中找到一些静态文件。

                              因此请确保错误仅发生在index 或其他页面上。如果问题仅发生在索引中,很可能您需要检查静态文件。我建议打开 Chrome 预览控制台并检查是否有任何错误。

                              在我的例子中,服务器找不到 favicon.ico 和另外两个 CSS。

                              为了解决这个问题,我通过了python manage.py collectstatic,它成功了。

                              【讨论】:

                                【解决方案30】:

                                我的问题是错误的 404.html 模板 - 我复制并粘贴了

                                <a href="{% url 'home:index' %}">
                                

                                而不是(在我的情况下)

                                 <a href="{% url 'posts:index' %}">
                                

                                这就是为什么出现 500 个

                                【讨论】:

                                  猜你喜欢
                                  • 2015-02-16
                                  • 2016-03-12
                                  • 2015-10-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2021-11-03
                                  • 2019-11-04
                                  • 2019-10-02
                                  • 2015-05-10
                                  相关资源
                                  最近更新 更多