Opened 3 weeks ago

Last modified 4 hours ago

#36728 assigned Cleanup/optimization

Validate template tag context argument at definition time, rather than compile time

Reported by: Jake Howard Owned by: Jake Howard
Component: Template system Version: dev
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: yes
Easy pickings: no UI/UX: no

Description

If a template tag is defined incorrectly, by not accepting a context argument with takes_context=True:

@register.simple_tag(takes_context=True)
def my_tag():
    pass

An error is only raised when the template is compiled, rather than when the tag is defined as someone may expect. This means there’s extra work done at compile time, which is duplicated each time the tag is used, across multiple templates.

Moving this validation to be done at definition time would likely improve performance. Reading the function signature is already done at definition time, so the performance improvement will likely only be checking the list of arguments, but reporting the error earlier would probably also be a DX improvement.

See also forum thread.

Change History (3)

comment:1 by Natalia Bidart, 3 weeks ago

Triage Stage: UnreviewedAccepted

Thank you Jake! Once the fix is in place, I would like to see some before/after benchmarks for the startup time to confirm the assumption that this won't hurt it.

comment:2 by Jake Howard, 3 weeks ago

Has patch: set

PR

As mentioned in the PR description, because the majority of the work was already being done eagerly, the performance benefit is likely to be within margin of error for Python benchmarks (it's just a list member check). Therefore, I've not done any benchmarks currently.

comment:3 by Jacob Walls, 4 hours ago

Patch needs improvement: set
Note: See TracTickets for help on using tickets.
Back to Top