Fixed #241 -- added django.contrib.markup app with markup templatetags for Textile, ReST and Markdown
git-svn-id: http://code.djangoproject.com/svn/django/trunk@467 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
f65350b197
commit
8e2d275390
|
@ -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)
|
|
@ -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 “quotes” 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>"""
|
Loading…
Reference in New Issue