How to print line breaks in Python Django template
for some reason i can't change this value
val = """
Brand AER \nDetail Material Kuningan berlapis emas chrome dan powder coating \nTipe Produk Keran Shower \nWarna Emas \nMaterial Kuningan \nUkuran Kemasan 12cm x 19cm x 13cm \nUkuran Barang 12cm x 19cm x 13cm \nBerat 2kg \nManual Instruksi instalasi manual dapat didownload di link berikut:https://aer.co.id/products/aer-kran-shower-panas-dingin-luxury-series-sah-sr1/?attachment_id=10954&download_file=5e267c93cdc76&_wpnonce=28db09bc61
"""
which has '\n' in it with linebreaks or linebreaksbr filter i've tried this
{ val|linebreaks }}
{ val|linebreaksbr }}
the val
stays the same
then i tried @AndrewFox answer and did this and it worked for me
Change \n
to <br>
and autoescape off
{% autoescape off %}
{{ val }}
{% endautoescape %}
Use the linebreaks
filter.
For example:
{{ value|linebreaks }}
If value is Joel\nis a slug
, the output will be <p>Joel<br />is a slug</p>
.
All of these answers don't explicitly mention that {{ value|linebreaksbr }}
should be used in the display template ie the get request not the post request.
So if you had a template to display say post.details, it would be
<h4>Below are the post details</h4>
{{ post.details|linebreaksbr }}
And not in the post form
<form method="post">
{% csrf_token %}
{{ form|linebreaksbr }}
<button>Save post</button>
</form>
Had this same issue and after figuring it our decided that someone outthere might find it handy. Happy coding!
You can also use the linebreaksbr
filter to simply convert all newlines to <br>
without additional <p>
.
Example:
{{ value|linebreaksbr }}
If value
is Joel\nis a slug
, the output will be Joel<br>is a slug
.
The difference from Ignacio's answer (linebreaks
filter) is that linebreaks
tries to guess the paragraphs in a text and wrap every paragraph in <p>
where linebreaksbr
simply substitutes newlines with <br>
.
Here's a demo:
>>> from django.template.defaultfilters import linebreaks
>>> from django.template.defaultfilters import linebreaksbr
>>> text = 'One\nbreak\n\nTwo breaks\n\n\nThree breaks'
>>> linebreaks(text)
'<p>One<br />break</p>\n\n<p>Two breaks</p>\n\n<p>Three breaks</p>'
>>> linebreaksbr(text)
'One<br />break<br /><br />Two breaks<br /><br /><br />Three breaks'