Opened 7 years ago

Last modified 10 months ago

#28050 assigned New feature

TemplateSyntaxError should contain template name

Reported by: Petr Dlouhý Owned by: Tim McCurrach
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: yes Patch needs improvement: yes
Easy pickings: no UI/UX: no

Description

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/base.py", 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/base.py", 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 (15)

comment:1 by kapil garg, 7 years ago

Triage Stage: UnreviewedAccepted

comment:2 by kapil garg, 7 years ago

Owner: changed from nobody to kapil garg
Status: newassigned

comment:3 by kapil garg, 7 years ago

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

comment:4 by Tim Graham, 7 years ago

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 by Roger Masse, 7 years ago

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 by Roger Masse, 7 years ago

Patch needs improvement: unset

comment:7 by Roger Masse, 7 years ago

Has patch: unset

comment:8 by Roger Masse, 7 years ago

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

comment:9 by Roger Masse, 7 years ago

Cc: Roger Masse added

comment:10 by Tim Graham, 6 years ago

#28698 is a duplicate with an alternate approach.

comment:11 by Tim Martin, 6 years ago

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 by Tim Graham, 6 years ago

Has patch: set
Patch needs improvement: set

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

comment:13 by Himanshu Chauhan, 6 years ago

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.

comment:14 by Tim McCurrach, 10 months ago

Owner: changed from Roger Masse to Tim McCurrach

comment:15 by Mariusz Felisiak, 10 months ago

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