Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fixed #241 -- added django.contrib.markup app with markup templatetag…
…s for Textile, ReST and Markdown

git-svn-id: http://code.djangoproject.com/svn/django/trunk@467 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
jacobian committed Aug 10, 2005
1 parent f65350b commit 8e2d275
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 0 deletions.
Empty file.
Empty file.
46 changes: 46 additions & 0 deletions django/contrib/markup/templatetags/markup.py
@@ -0,0 +1,46 @@
"""
Set of "markup" template filters for Django. These filters transform plain text
markup syntaxes to HTML; currently there is support for:
* Textile, which requires the PyTextile library available at
http://dealmeida.net/projects/textile/
* Markdown, which requires the Python-markdown library from
http://www.freewisdom.org/projects/python-markdown
* ReStructuredText, which requires docutils from http://docutils.sf.net/
In each case, if the required library is not installed, the filter will
silently fail and return the un-marked-up text.
"""

from django.core import template

def textile(value, _):
try:
import textile
except ImportError:
return value
else:
return textile.textile(value)

def markdown(value, _):
try:
import markdown
except ImportError:
return value
else:
return markdown.markdown(value)

def restructuredtext(value, _):
try:
from docutils.core import publish_parts
except ImportError:
return value
else:
parts = publish_parts(source=value, writer_name="html4css1")
return parts["fragment"]

template.register_filter("textile", textile, False)
template.register_filter("markdown", markdown, False)
template.register_filter("restructuredtext", restructuredtext, False)
45 changes: 45 additions & 0 deletions tests/othertests/markup.py
@@ -0,0 +1,45 @@
# Quick tests for the markup templatetags (django.contrib.markup)
#
# Requires that all supported markup modules be installed
# (http://dealmeida.net/projects/textile/,
# http://www.freewisdom.org/projects/python-markdown, and
# http://docutils.sf.net/)


from django.core.template import Template, Context
import django.contrib.markup.templatetags.markup # this registers the filters

# simple examples 'cause this isn't actually testing the markup, just
# that the filters work as advertised

textile_content = """Paragraph 1
Paragraph 2 with "quotes" and @code@"""

markdown_content = """Paragraph 1
## An h2 with *italics*"""

rest_content = """Paragraph 1
Paragraph 2 with a link_
.. _link: http://www.example.com/"""

t = Template("""{{ textile_content|textile }}
----
{{ markdown_content|markdown }}
----
{{ rest_content|restructuredtext }}""")

rendered = t.render(Context(locals()))

assert rendered.strip() == """<p>Paragraph 1</p>
<p>Paragraph 2 with &#8220;quotes&#8221; and <code>code</code></p>
----
<p>Paragraph 1</p><h2>An h2 with *italics*</h2>
----
<p>Paragraph 1</p>
<p>Paragraph 2 with a <a class="reference" href="http://www.example.com/">link</a></p>"""

0 comments on commit 8e2d275

Please sign in to comment.