Package: django-markdown-deux
A small Django app that provides template tags for usingMarkdownusing thepython-markdown2library.What's with the "deux" in the name?The obvious name for this project isdjango-markdown2. However, therealready is one!and name
confusion doesn't help anybody. Plus, I took French immersion in school for 12
years: might as well put it to use.So why another project then?Because I wanted to do something slightly different. Django-markdown2'smarkdownfilter takes"extras"as arguments
-- with the one exception that "safe" is transformed to python-markdown2'ssafe_modeargument. This is handy for quick usage. My use case is more
commonly: lots ofmarkdownfilter and block usage in my Django templates with
the same set of python-markdown2 options.InstallationChoose theoneof the following that works best for you:Install the latest release from PyPI:pip install django-markdown-deuxor, if you useActivePython:pypm install django-markdown-deuxThese should install the dependentpython-markdown2package.Get a git clone of the source tree:git clone git://github.com/trentm/django-markdown-deux.gitYou might want a particular tag:cd django-markdown-deux
  git tag -l   # list available tags
  git checkout $tagnameThen you'll need the "lib" subdir on your PYTHONPATH:python setup.py install # or 'export PYTHONPATH=`pwd`/lib:$PYTHONPATH'You'll also need thepython-markdown2
library:git clone git@github.com:trentm/python-markdown2.git
  cd python-markdown2
  python setup.py install   # or 'export PYTHONPATH=`pwd`/python-markdown2/lib'Django project setupAddmarkdown_deuxtoINSTALLED_APPSin your project's "settings.py".Optionally set some of theMARKDOWN_DEUX_*settings. See the "Settings"
section below.UsageThemarkdown_deuxfacilities typically take an optional "style" argument. This
is a name for a set of options to thepython-markdown2processor. There is
a "default" style that is used if no argument is given. See theMARKDOWN_DEUX_STYLESsetting below for more.markdowntemplate filter{% load markdown_deux_tags %}
...
{{ myvar|markdown:"STYLE" }}      {# convert `myvar` to HTML using the "STYLE" style #}
{{ myvar|markdown }}              {# same as `{{ myvar|markdown:"default"}}` #}markdowntemplate block tag{% load markdown_deux_tags %}
...
{% markdown STYLE %}        {# can omit "STYLE" to use the "default" style #}
This is some **cool**
[Markdown](http://daringfireball.net/projects/markdown/)
text here.
{% endmarkdown %}markdown_allowedtemplate tagIn a template:{% markdown_allowed %}will emit a short HTML blurb that says Markdown syntax is allowed. This can be
handy for placing under form elements that accept markdown syntax. You can also
use it as thehelp_textfor a form field something like:# myapp/forms.py
from markdown_deux.templatetags.markdown_deux_tags import markdown_allowed
class MyForm(forms.Form):
    #...
    description = forms.CharField(
        label="Description (required)",
        widget=forms.Textarea(attrs={"rows": 5}),
        help_text=_secondary_span("A brief description of your thing.<br/> "
            + markdown_allowed()),
        required=True)markdown_cheatsheettag{% markdown_cheatsheet %}This outputs HTML giving a narrow (appropriate for, e.g., a sidebar) listing of
some of the more common Markdown features.markdown_deux.markdown(TEXT, STYLE)in your Python codeThemarkdownfilter and block tags above ultimately use thismarkdown_deux.markdown(...)function. You might find it useful to do Markdown
processing in your Python code (e.g. in a view, in a model.save()method).SettingsAll settings for this app are optional.MARKDOWN_DEUX_STYLESsettingA mapping of style name to a dict of keyword arguments for python-markdown2'smarkdown2.markdown(text, **kwargs). For example the default setting is
effectively:MARKDOWN_DEUX_STYLES = {
    "default": {
        "extras": {
            "code-friendly": None,
        },
        "safe_mode": "escape",
    },
}I.e. only the "default" style is defined and it just uses thecode-friendly
extraand escapes
raw HTML in the given Markdown (for safety).Here is how you might add styles of your own, and preserve the default style:# settings.py
from markdown_deux.conf.settings import MARKDOWN_DEUX_DEFAULT_STYLE

MARKDOWN_DEUX_STYLES = {
    "default": MARKDOWN_DEUX_DEFAULT_STYLE,
    "trusted": {
        "extras": {
            "code-friendly": None,
        },
        # Allow raw HTML (WARNING: don't use this for user-generated
        # Markdown for your site!).
        "safe_mode": False,
    },
    # Here is what http://code.activestate.com/recipes/ currently uses.
    "recipe": {
        "extras": {
            "code-friendly": None,
        },
        "safe_mode": "escape",
        "link_patterns": [
            # Transform "Recipe 123" in a link.
            (re.compile(r"recipe\s+#?(\d+)\b", re.I),
             r"http://code.activestate.com/recipes/\1/"),
        ],
        "extras": {
            "code-friendly": None,
            "pyshell": None,
            "demote-headers": 3,
            "link-patterns": None,
            # `class` attribute put on `pre` tags to enable using
            # <http://code.google.com/p/google-code-prettify/> for syntax
            # highlighting.
            "html-classes": {"pre": "prettyprint"},
            "cuddled-lists": None,
            "footnotes": None,
            "header-ids": None,
        },
        "safe_mode": "escape",
    }
}MARKDOWN_DEUX_HELP_URLsettingA URL for to which to link for full markdown syntax default. This link is
only in the output of themarkdown_allowedandmarkdown_cheatsheettemplate tags.The default ishttp://daringfireball.net/projects/markdown/syntax, the
canonical Markdown syntax reference. However, if your site uses Markdown with
specific tweaks, you may prefer to have your own override. For example,ActiveState Codeuses:MARKDOWN_DEUX_HELP_URL = "/help/markdown/"To link toits own Markdown syntax notes
URL.