Opened 3 years ago

Last modified 3 years ago

#28050 assigned New feature

TemplateSyntaxError should contain template name

Reported by: Petr Dlouhý Owned by: Roger Masse
Component: Template system Version: 1.11
Severity: Normal Keywords: TemplateSyntaxError template
Cc: Roger Masse Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: yes
Easy pickings: no UI/UX: no


If there is an error in template, Django doesn't report the template name. It could be quite uneasy to find the buggy template in such case.

e.g.: I have got following error:

  File "/home/petr/soubory/programovani/Auto-mat/DPNK/dpnk/env/lib/python3.5/site-packages/django/template/", line 509, in parse
    self.invalid_block_tag(token, command, parse_until)
  File "/home/petr/soubory/programovani/Auto-mat/DPNK/dpnk/env/lib/python3.5/site-packages/django/template/", line 565, in invalid_block_tag
    get_text_list(["'%s'" % p for p in parse_until], 'or'),
django.template.exceptions.TemplateSyntaxError: Invalid block tag on line 127: 'endblock', expected 'empty' or 'endthumbnail'. Did you forget to register or load this tag?

It contains even line number, but I have no idea in which file.

I think, it is not that difficult to include template name in the bug report. In my case I tried to debug the error call. In django.template.base, the invalidb_block_tag is called from parse() where the template name can be obtained from self.origin.template_name.

Change History (13)

comment:1 Changed 3 years ago by kapil garg

Triage Stage: UnreviewedAccepted

comment:2 Changed 3 years ago by kapil garg

Owner: changed from nobody to kapil garg
Status: newassigned

comment:3 Changed 3 years ago by kapil garg

Has patch: set
Last edited 3 years ago by Tim Graham (previous) (diff)

comment:4 Changed 3 years ago by Tim Graham

Patch needs improvement: set

I'm not particularly pleased with the current patch which causes the template name to be displayed redundantly several times in the debug view. Hopefully we could avoid that.

comment:5 Changed 3 years ago by Roger Masse

Owner: changed from kapil garg to Roger Masse

My plan is to improve the patch as described in the pull request with the suggestion by timgraham:

There might be a possibility for the debug view to modify TemplateDoesNotExist's message so the redundant template names aren't added. In any case, a test is required.

comment:6 Changed 3 years ago by Roger Masse

Patch needs improvement: unset

comment:7 Changed 3 years ago by Roger Masse

Has patch: unset

comment:8 Changed 3 years ago by Roger Masse

Has patch: set
Last edited 3 years ago by Roger Masse (previous) (diff)

comment:9 Changed 3 years ago by Roger Masse

Cc: Roger Masse added

comment:10 Changed 3 years ago by Tim Graham

#28698 is a duplicate with an alternate approach.

comment:11 Changed 3 years ago by Tim Martin

Has patch: unset

The original pull request was closed by the author, and there's another branch open that doesn't have a pull request yet (and I think still needs some rebasing / squashing?)

If anyone thinks there's a clean patch available for this please post a fresh link to it.

comment:12 Changed 3 years ago by Tim Graham

Has patch: set
Patch needs improvement: set

There's PR 8974 but I'm still not convinced it's ideal.

comment:13 Changed 3 years ago by Himanshu Chauhan

I think that in case of Template Syntax Error it is very unhelpful to show the python traceback because that will be usually same for all the errors of this kind and as mentioned in the ticket does not show the template file path where the error has been encountered. So my solution is to catch the template syntax error exception and instead of going for default python exception handling mechanism, we actually display the template path, template line number and the exception message which I believe will be more useful than the default python traceback in debugging template errors.

I would like to work on this and want to know your views about my approach.

Note: See TracTickets for help on using tickets.
Back to Top