Replace \n with <br />
PythonStringReplaceNewlinePython Problem Overview
I'm parsing text from file with Python. I have to replace all newlines (\n) with
cause this text will build html-content. For example, here is some line from file:
'title\n'
Now I do:
thatLine.replace('\n', '<br />')
print thatLine
And I still see the text with newline after it.
Python Solutions
Solution 1 - Python
thatLine = thatLine.replace('\n', '<br />')
str.replace() returns a copy of the string, it doesn't modify the string you pass in.
Solution 2 - Python
Just for kicks, you could also do
mytext = "<br />".join(mytext.split("\n"))
to replace all newlines in a string with <br />
.
Solution 3 - Python
For some reason using python3 I had to escape the ""-sign
somestring.replace('\\n', '')
Hope this helps someone else!
Solution 4 - Python
To handle many newline delimiters, including character combinations like \r\n
, use splitlines (see this related post) use the following:
'<br />'.join(thatLine.splitlines())
Solution 5 - Python
thatLine = thatLine.replace('\n', '<br />')
Strings in Python are immutable. You might need to recreate it with the assignment operator.
Solution 6 - Python
You could also have problems if the string has <
, >
or &
chars in it, etc. Pass it to cgi.escape()
to deal with those.
http://docs.python.org/library/cgi.html?highlight=cgi#cgi.escape
Solution 7 - Python
The Problem is When you denote '\n'
in the replace()
call , '\n'
is treated as a String length=4
made out of ' \ n '
To get rid of this, use ascii notation. http://www.asciitable.com/
example:
newLine = chr(10)
thatLine=thatLine.replace(newLine , '<br />')
print(thatLine) #python3
print thatLine #python2
.
Solution 8 - Python
I know this is an old thread but I tried the suggested answers and unfortunately simply replacing line breaks with <br />
didn't do what I needed it to. It simply rendered them literally as text.
One solution would have been to disable autoescape like this: {% autoescape false %}{{ mystring }}{% endautoescape %}
and this works fine but this is no good if you have user-provided content. So this was also not a solution for me.
So this is what I used:
In Python:
newvar = mystring.split('\n')
And then, passing newvar
into my Jinja template:
{% for line in newvar %}
<br />{{ line }}
{% endfor %}