Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I make django's markdown filter transform a carriage return to <br />?

How can I change the default behavior in the markdown filter so that it transforms a newline to a br tag?

like image 534
Hobhouse Avatar asked Nov 24 '09 13:11

Hobhouse


1 Answers

I don't think messing around with the newline syntax is a good idea ...

I agree with Henrik's comment. From the markdown docs:

When you do want to insert a <br /> break tag using Markdown, you end a line with two or more spaces, then type return.

Yes, this takes a tad more effort to create a <br />, but a simplistic “every line break is a <br />” rule wouldn’t work for Markdown. Markdown’s email-style blockquoting and multi-paragraph list items work best — and look better — when you format them with hard breaks.

Have you looked at the other Django markup options, textile and restructuredtext? Their syntax might suit you better.


but if you still want to ...

A rough and ready method is to chain the markdown and linebreaksbr filters.

{{ value|markdown|linebreaksbr }}

This runs the markdown filter, then the linebreaksbr filter, which replaces \n with <br />. You'll probably end up with too many linebreaks, but that might be better for you than too few.

If you a better solution than that, you could

  1. Write a custom filter, as John suggests in his answer.

  2. Dive into the the python-markdown library, which Django uses, and write an extension that implements your desired newline syntax. You would then use the extension with the filter

    {{ value|markdown:"linebreakextension" }}

like image 124
Alasdair Avatar answered Nov 15 '22 04:11

Alasdair