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

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

I agree with Henrik's comment. From the [markdown docs](http://daringfireball.net/projects/markdown/syntax):

> 
> 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](http://docs.djangoproject.com/en/dev/ref/templates/builtins/#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](http://www.freewisdom.org/projects/python-markdown) library, which Django uses, and [write an extension](http://www.freewisdom.org/projects/python-markdown/Writing_Extensions) that implements your desired newline syntax. You would then use the extension with the filter

`{{ value|markdown:"linebreakextension" }}`
You could write a [custom filter](http://docs.djangoproject.com/en/dev/howto/custom-template-tags/) that calls markdown, then does [replace](http://docs.python.org/library/stdtypes.html#str.replace) on its output.