Tired of annoying rich text editors getting in the way of your content input? Wish Wagtail worked more like a wiki? Well, now it can.
wagtail-markdown
provides Markdown field support for Wagtail.
Specifically, it provides:
- A
wagtailmarkdown.blocks.MarkdownBlock
for use in streamfields. - A
wagtailmarkdown.fields.MarkdownField
for use in page models. - A
wagtailmarkdown.edit_handlers.MarkdownPanel
for use in the editor interface. - A
markdown
template tag.
The markdown rendered is based on python-markdown
, but with several
extensions to make it actually useful in Wagtail:
- Tables.
- Code highlighting.
- Inline links to pages (
<:My page name|link title>
) and documents (<:doc:My fancy document.pdf>
), and inline images (<:image:My pretty image.jpeg>
). - Inline Markdown preview using SimpleMDE
These are implemented using the python-markdown
extension interface.
Currently, adding new extensions isn't possible without modifying the code, but
that shouldn't be difficult to implement (patches welcome).
Alpha release is available on Pypi - https://pypi.org/project/wagtail-markdown/ - installable via pip install wagtail-markdown
. It's not a production ready release.
Add it to INSTALLED_APPS
:
INSTALLED_APPS = (
...
'wagtailmarkdown',
...
)
Use it as a StreamField
block:
from wagtailmarkdown.blocks import MarkdownBlock
class MyStreamBlock(StreamBlock):
markdown = MarkdownBlock(icon="code")
Or use as a page field:
from wagtailmarkdown.edit_handlers import MarkdownPanel
from wagtailmarkdown.fields import MarkdownField
class MyPage(Page):
body = models.MarkdownField()
content_panels = [
FieldPanel("title", classname="full title"),
MarkdownPanel("body"),
]
And render the content in a template:
{% load wagtailmarkdown %}
<article>
{{ self.body|markdown }}
</article>
To enable syntax highlighting please use the Pygments (pip install Pygments
) library.
NB: The current version was written in about an hour and is probably completely unsuitable for production use. Testing, comments and feedback are welcome: [email protected] (or open a Github issue).
- Make a alpha/beta release and submit to PyPI
- Set up CI
- Set up tests