How to print line breaks in Python Django template
Question:
{'quotes': u'Live before you die.nn"Dream as if you'll live forever, live as if you'll die today"nn"Love one person, take care of them until you die. You know, raise kids. Have a good life. Be a good friend. Try to be completely who you are, figure out what you personally love and go after it with everything you've got no matter how much it takes." -Angelina Jolie.'}
Notice my dictionary has line breaks in them: n
How do I display my template with those line breaks?
{{quotes|withlinebreaksn}}
Answers:
Use the linebreaks
filter.
For example:
{{ value|linebreaks }}
If value is Joelnis a slug
, the output will be <p>Joel<br />is a slug</p>
.
You can also use the linebreaksbr
filter to simply convert all newlines to <br>
without additional <p>
.
Example:
{{ value|linebreaksbr }}
If value
is Joelnis 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 = 'OnenbreaknnTwo breaksnnnThree breaks'
>>> linebreaks(text)
'<p>One<br />break</p>nn<p>Two breaks</p>nn<p>Three breaks</p>'
>>> linebreaksbr(text)
'One<br />break<br /><br />Two breaks<br /><br /><br />Three breaks'
Use '<br>'
instead of /n
.
If necessary, you can do a .replace('/n', '<br>')
.
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!
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 %}
{'quotes': u'Live before you die.nn"Dream as if you'll live forever, live as if you'll die today"nn"Love one person, take care of them until you die. You know, raise kids. Have a good life. Be a good friend. Try to be completely who you are, figure out what you personally love and go after it with everything you've got no matter how much it takes." -Angelina Jolie.'}
Notice my dictionary has line breaks in them: n
How do I display my template with those line breaks?
{{quotes|withlinebreaksn}}
Use the linebreaks
filter.
For example:
{{ value|linebreaks }}
If value is Joelnis a slug
, the output will be <p>Joel<br />is a slug</p>
.
You can also use the linebreaksbr
filter to simply convert all newlines to <br>
without additional <p>
.
Example:
{{ value|linebreaksbr }}
If value
is Joelnis 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 = 'OnenbreaknnTwo breaksnnnThree breaks'
>>> linebreaks(text)
'<p>One<br />break</p>nn<p>Two breaks</p>nn<p>Three breaks</p>'
>>> linebreaksbr(text)
'One<br />break<br /><br />Two breaks<br /><br /><br />Three breaks'
Use '<br>'
instead of /n
.
If necessary, you can do a .replace('/n', '<br>')
.
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!
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 %}