mirror of https://github.com/django/django.git
Fixed #33653 -- Fixed template crash when calling methods for built-in types without required arguments.
Regression in 09341856ed
.
This commit is contained in:
parent
1a78ef2b85
commit
0dd2920909
|
@ -913,15 +913,18 @@ class Variable:
|
||||||
try: # method call (assuming no args required)
|
try: # method call (assuming no args required)
|
||||||
current = current()
|
current = current()
|
||||||
except TypeError:
|
except TypeError:
|
||||||
signature = inspect.signature(current)
|
|
||||||
try:
|
try:
|
||||||
signature.bind()
|
signature = inspect.signature(current)
|
||||||
except TypeError: # arguments *were* required
|
except ValueError: # No signature found.
|
||||||
current = (
|
current = context.template.engine.string_if_invalid
|
||||||
context.template.engine.string_if_invalid
|
|
||||||
) # invalid method call
|
|
||||||
else:
|
else:
|
||||||
raise
|
try:
|
||||||
|
signature.bind()
|
||||||
|
except TypeError: # Arguments *were* required.
|
||||||
|
# Invalid method call.
|
||||||
|
current = context.template.engine.string_if_invalid
|
||||||
|
else:
|
||||||
|
raise
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
template_name = getattr(context, "template_name", None) or "unknown"
|
template_name = getattr(context, "template_name", None) or "unknown"
|
||||||
logger.debug(
|
logger.debug(
|
||||||
|
|
|
@ -183,6 +183,14 @@ class TemplateTestMixin:
|
||||||
for node in template.nodelist:
|
for node in template.nodelist:
|
||||||
self.assertEqual(node.origin, template.origin)
|
self.assertEqual(node.origin, template.origin)
|
||||||
|
|
||||||
|
def test_render_built_in_type_method(self):
|
||||||
|
"""
|
||||||
|
Templates should not crash when rendering methods for built-in types
|
||||||
|
without required arguments.
|
||||||
|
"""
|
||||||
|
template = self._engine().from_string("{{ description.count }}")
|
||||||
|
self.assertEqual(template.render(Context({"description": "test"})), "")
|
||||||
|
|
||||||
|
|
||||||
class TemplateTests(TemplateTestMixin, SimpleTestCase):
|
class TemplateTests(TemplateTestMixin, SimpleTestCase):
|
||||||
debug_engine = False
|
debug_engine = False
|
||||||
|
|
Loading…
Reference in New Issue