Fixed #29008 -- Fixed crash of 404 debug page when URL path converter raises Http404.

This commit is contained in:
Ngalim Siregar 2019-08-09 22:40:25 +02:00 committed by Mariusz Felisiak
parent 514efa3129
commit 503f60ff57
2 changed files with 10 additions and 3 deletions

View File

@ -5,10 +5,10 @@ import types
from pathlib import Path from pathlib import Path
from django.conf import settings from django.conf import settings
from django.http import HttpResponse, HttpResponseNotFound from django.http import Http404, HttpResponse, HttpResponseNotFound
from django.template import Context, Engine, TemplateDoesNotExist from django.template import Context, Engine, TemplateDoesNotExist
from django.template.defaultfilters import pprint from django.template.defaultfilters import pprint
from django.urls import Resolver404, resolve from django.urls import resolve
from django.utils import timezone from django.utils import timezone
from django.utils.datastructures import MultiValueDict from django.utils.datastructures import MultiValueDict
from django.utils.encoding import force_str from django.utils.encoding import force_str
@ -483,7 +483,7 @@ def technical_404_response(request, exception):
caller = '' caller = ''
try: try:
resolver_match = resolve(request.path) resolver_match = resolve(request.path)
except Resolver404: except Http404:
pass pass
else: else:
obj = resolver_match.func obj = resolver_match.func

View File

@ -12,11 +12,13 @@ from unittest import mock
from django.core import mail from django.core import mail
from django.core.files.uploadedfile import SimpleUploadedFile from django.core.files.uploadedfile import SimpleUploadedFile
from django.db import DatabaseError, connection from django.db import DatabaseError, connection
from django.http import Http404
from django.shortcuts import render from django.shortcuts import render
from django.template import TemplateDoesNotExist from django.template import TemplateDoesNotExist
from django.test import RequestFactory, SimpleTestCase, override_settings from django.test import RequestFactory, SimpleTestCase, override_settings
from django.test.utils import LoggingCaptureMixin from django.test.utils import LoggingCaptureMixin
from django.urls import path, reverse from django.urls import path, reverse
from django.urls.converters import IntConverter
from django.utils.functional import SimpleLazyObject from django.utils.functional import SimpleLazyObject
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.views.debug import ( from django.views.debug import (
@ -237,6 +239,11 @@ class DebugViewTests(SimpleTestCase):
technical_404_response(mock.MagicMock(), mock.Mock()) technical_404_response(mock.MagicMock(), mock.Mock())
m.assert_called_once_with(encoding='utf-8') m.assert_called_once_with(encoding='utf-8')
def test_technical_404_converter_raise_404(self):
with mock.patch.object(IntConverter, 'to_python', side_effect=Http404):
response = self.client.get('/path-post/1/')
self.assertContains(response, 'Page not found', status_code=404)
class DebugViewQueriesAllowedTests(SimpleTestCase): class DebugViewQueriesAllowedTests(SimpleTestCase):
# May need a query to initialize MySQL connection # May need a query to initialize MySQL connection