Hi, I am trying to contribute to code. I picked my first issue to solve. https://code.djangoproject.com/ticket/28935 And wanted to solve for the last few weeks, and finally kinda fixed it, but I don't know whether it's good enough. Feels like it's just monkey patched of something. Please have a look.
To summarise the issue #28935: When "extends" and "include" template tags are used together in same html page, if "include" tries to include nonexistent html file, error page gives incorrect information (filename and line number) under the heading "Error during template rendering". For example, [base.html] {% block content %} {% endblock %} [home.html] {% extends 'base.html' %} {% block content %} {% include "./nonexistent.html" %} {% endblock %} This gives Error during template rendering In template /.../base.html, error at line 0 nonexistent.html But the expected error should be In template /.../home.html, error at line 3 nonexistent.html So here's my code change: [django > template > context.py ] # made a new global variable at the top in context.py template_stack = [] [django > template > base.py > Node > render_annotated] def render_annotated(self, context): try: return self.render(context) except Exception as e: if context.template.engine.debug and not hasattr(e, 'template_debug'): from django.template.context import template_stack # template_stack[-1].name ==> "base.html" # template_stack[-2].nodelist[0].token.contents ==> "extends 'base.html" try: if len(template_stack) >= 2 and "extends" in template_stack[-2].nodelist[0].token.contents and template_stack[-1].name in template_stack[-2].nodelist[0].token.contents: e.template_debug = context.template.get_exception_info(e, self.token) else: e.template_debug = context.render_context.template.get_exception_info(e, self.token) except (AttributeError, IndexError, KeyError): e.template_debug = context.render_context.template.get_exception_info(e, self.token) raise First of all, there is 1 test failure. But if I manually test the failed one by making exact same files being tested, error page seems to be Okay. Second, is this ways of code change acceptable? ====================================================================== FAIL: test_compile_tag_error_27956 (template_tests.tests.TemplateTests) Errors in a child of {% extends %} are displayed correctly. ---------------------------------------------------------------------- Traceback (most recent call last): File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/case.py", line 59, in testPartExecutor yield File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/case.py", line 628, in run testMethod() File "/Users/minhokim/Code/Repo/django/tests/template_tests/tests.py", line 135, in test_compile_tag_error_27956 self.assertEqual(e.exception.template_debug['during'], '{% badtag %}') File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/case.py", line 852, in assertEqual assertion_func(first, second, msg=msg) File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/case.py", line 845, in _baseAssertEqual raise self.failureException(msg) AssertionError: 'nt.html" %}\n' != '{% badtag %}' ---------------------------------------------------------------------- Thank you. - Min ho Kim -- You received this message because you are subscribed to the Google Groups "Django developers (Contributions to Django itself)" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-developers+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-developers/e4b1c45a-8750-4ae4-8985-dd09421d06a8%40googlegroups.com.