Fixed #27783 -- Switched VariableDoesNotExist.__str__() to repr() context.

Using __str__() and then repr'ing the result looks strange and can lead
to recursive rendering of forms.
This commit is contained in:
Ryan O’Hara 2017-01-26 12:10:15 -08:00 committed by Tim Graham
parent 2757209c9d
commit 7c4289d0b9
3 changed files with 10 additions and 2 deletions

View File

@ -119,7 +119,7 @@ class VariableDoesNotExist(Exception):
self.params = params self.params = params
def __str__(self): def __str__(self):
return self.msg % tuple(force_text(p, errors='replace') for p in self.params) return self.msg % self.params
class Origin: class Origin:

View File

@ -0,0 +1,8 @@
from django.template.base import VariableDoesNotExist
from django.test import SimpleTestCase
class VariableDoesNotExistTests(SimpleTestCase):
def test_str(self):
exc = VariableDoesNotExist(msg='Failed lookup in %r', params=({'foo': 'bar'},))
self.assertEqual(str(exc), "Failed lookup in {'foo': 'bar'}")

View File

@ -75,7 +75,7 @@ class VariableResolveLoggingTests(BaseTemplateLoggingTestCase):
raised_exception = self.test_handler.log_record.exc_info[1] raised_exception = self.test_handler.log_record.exc_info[1]
self.assertEqual( self.assertEqual(
str(raised_exception), str(raised_exception),
'Failed lookup for key [author] in %r' % ("{%r: %r}" % ('section', 'News')) "Failed lookup for key [author] in {'section': 'News'}"
) )
def test_no_log_when_variable_exists(self): def test_no_log_when_variable_exists(self):