#9883 closed (fixed)
the linebreaks filter strips leading and trailing whitespace from paragraphs
Reported by: | Antti Kaihola | Owned by: | Keith Bussell |
---|---|---|---|
Component: | Template system | Version: | dev |
Severity: | Keywords: | ||
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | yes | Patch needs improvement: | yes |
Easy pickings: | no | UI/UX: | no |
Description
The documentation for linebreaks says:
Replaces line breaks in plain text with appropriate HTML; a single newline becomes an HTML line break (<br />) and a new line followed by a blank line becomes a paragraph break (</p>). For example: {{ value|linebreaks }} If value is Joel\nis a slug, the output will be <p>Joel<br>is a slug</p>.
However, {{value|linebreaks}}
does more than that: it strips leading whitespace from the first line and trailing whitespace from the last line of every paragraph:
>>> linebreaks(' one \n two \n three \n four \n\n eins \n zwei \n drei \n') <p>one <br /> two <br /> three <br /> four</p> <p>eins <br /> zwei <br /> drei</p>
I admit this rarely is a problem, but I see no reason why it should be doing that (and not mention it in the docs).
My obscure use case is outputting monospace text where some tables are laid out using the 'NO-BREAK SPACE' (U+00A0)
Unicode character, which Python's .strip()
happily strips away. If a paragraph starts with a table and the first row is indented, the output is misformatted. Using linebreaksbr
or converting U+00A0
to
are my possible work-arounds, but it would been nice if the Django documentation had warned me :)
Attachments (1)
Change History (10)
comment:1 by , 16 years ago
milestone: | → 1.1 |
---|---|
Triage Stage: | Unreviewed → Accepted |
by , 16 years ago
Attachment: | no_strip.diff added |
---|
comment:2 by , 16 years ago
Has patch: | set |
---|---|
Resolution: | → fixed |
Status: | new → closed |
Triage Stage: | Accepted → Ready for checkin |
comment:3 by , 16 years ago
Resolution: | fixed |
---|---|
Status: | closed → reopened |
oops. went too far with the ticket state.
comment:4 by , 16 years ago
Owner: | changed from | to
---|---|
Status: | reopened → new |
comment:5 by , 16 years ago
Status: | new → assigned |
---|
comment:6 by , 16 years ago
Needs tests: | set |
---|---|
Patch needs improvement: | set |
Triage Stage: | Ready for checkin → Accepted |
Let's have a test that shows the problem.
comment:7 by , 16 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
James found the original commit back from prehistoric Django times and found no good reason to do the stripping. no_strip.diff removes the
strip()
call in both normal and autoescape code paths.Tests that utilize this functionality still pass.