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" }}`
**EDIT: As of the end of June, 2011, the extension below is now included with Python Markdown.**

Here is a Markdown extension that I wrote and am currently testing on my site to do exactly what you want:

```
"""
A python-markdown extension to treat newlines as hard breaks; like
StackOverflow and GitHub flavored Markdown do.

"""
import markdown

BR_RE = r'\n'

class Nl2BrExtension(markdown.Extension):

    def extendMarkdown(self, md, md_globals):
        br_tag = markdown.inlinepatterns.SubstituteTagPattern(BR_RE, 'br')
        md.inlinePatterns.add('nl', br_tag, '_end')

def makeExtension(configs=None):
    return Nl2BrExtension(configs)

```

I put this in a file called mdx\_nl2br.py and put it on my PYTHONPATH. You can then use it in a Django template like this:

```
{{ value|markdown:"nl2br" }}

```

If you'd like to use it in regular code, you can do something like this:

```
import markdown
md = markdown.Markdown(safe_mode=True, extensions=['nl2br'])
converted_text = md.convert(text)

```

[Here is the starting point in the docs](http://www.freewisdom.org/projects/python-markdown/Extensions) for using and writing extensions.