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.
thatLine = thatLine.replace('\n', '<br />')
str.replace() returns a copy of the string, it doesn't modify the string you pass in.
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 %}
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
To handle many newline delimiters, including character combinations like \r\n
, use splitlines (see this related post) use the following:
'<br />'.join(thatLine.splitlines())
For some reason using python3 I had to escape the "\"-sign
somestring.replace('\\n', '')
Hope this helps someone else!
thatLine = thatLine.replace('\n', '<br />')
Strings in Python are immutable. You might need to recreate it with the assignment operator.
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
.
Source: Stackoverflow.com