Opened 5 years ago

Closed 4 years ago

#27022 closed Bug (wontfix)

some DjangoTemplates builtin tags misparse lack of whitespace between variable name and boolean operator in arguments

Reported by: Peter Lai Owned by: nobody
Component: Template system Version: 1.10
Severity: Normal Keywords: tags, arguments, operators, whitespace
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

The django.DjangoTemplates template backend is unable to parse a comparison operator when there is no whitespace around the operator using builtin tag if:

{% if foo=='bar' %}
<!-- do something -->
{% endif %}

raises:

TemplateSyntaxError at url

Could not parse the remainder: '=='bar'' from 'foo=='bar''

At least one space is required on both sides of the == operator (So foo =='bar' and foo== 'bar' throws Could not parse the remainder: '=='bar'' from '=='bar'' and Could not parse the remainder: '==' from 'foo==', respectively). More than one space is acceptable.

This seems to affect the following boolean operators: ==, !=, <, >, <=, >=. My guess is the boolean expression tokenizer in DjangoTemplates first tries split(' ') then ultimately evals [0][1][2] (but I haven't actually looked at the source to verify this).

Change History (4)

comment:1 Changed 5 years ago by Baptiste Mispelon

Triage Stage: UnreviewedAccepted

Hi,

Indeed, the template language doesn't seem to support that. I'm not sure if it ever did either (I went back as far as 1.6 and observed the same error).

It'd be nice to be able to make this use-case work, so that we can match the Python semantics a bit better.
However, if it's too tricky then this should be mentionned in the documentation [1] at least.

Thanks.

[1] https://docs.djangoproject.com/en/dev/ref/templates/builtins/#boolean-operators

comment:2 Changed 5 years ago by Tim Graham

As for me, I'd rather not let it work so as to enforce a consistent style in templates. Since all examples use this style, I don't see much need to document that omitting the whitespace doesn't work. Is it difficult to figure out what went wrong from the error message?

comment:3 in reply to:  2 Changed 4 years ago by Anton Samarchyan

Replying to Tim Graham:

As for me, I'd rather not let it work so as to enforce a consistent style in templates. Since all examples use this style, I don't see much need to document that omitting the whitespace doesn't work. Is it difficult to figure out what went wrong from the error message?

I completely agree. Probably wontfix is the best option here.

comment:4 Changed 4 years ago by Tim Graham

Resolution: wontfix
Status: newclosed
Note: See TracTickets for help on using tickets.
Back to Top