Skip to main content

A Django app that allows the easy addition of Stack Overflow's 'PageDown' markdown editor to a django form field

Project description

Django Pagedown

Add Stack Overflow's "Pagedown" Markdown editor to your Django Admin or custom form.

Screenshot of Django Admin with Pagedown initialised


Version >= 2.0.0 of django-pagedown requires Django 2.1.0 or above (previous versions should support Django all the way back to around 1.1).


  1. Get the code: pip install django-pagedown
  2. Add pagedown.apps.PagedownConfig to your INSTALLED_APPS
  3. Collect the static files: python collectstatic


The widget can be used both inside the django admin or independendly.

Inside the Django Admin:

If you want to use the pagedown editor in a django admin field, there are numerous possible approaches:

  • To use it in all TextField's in your admin form:

    from django.contrib import admin
    from django.db import models
    from pagedown.widgets import AdminPagedownWidget
    class AlbumAdmin(admin.ModelAdmin):
        formfield_overrides = {
            models.TextField: {'widget': AdminPagedownWidget },
  • To only use it on particular fields, first create a form (in

    from django import forms
    from pagedown.widgets import AdminPagedownWidget
    from music.models import Album
    class AlbumForm(forms.ModelForm):
        name = forms.CharField(widget=AdminPagedownWidget())
        description = forms.CharField(widget=AdminPagedownWidget())
        class Meta:
            model = Album
            fields = "__all__"

    and in your

    from django.contrib import admin
    from forms import FooModelForm
    from models import FooModel
    class FooModelAdmin(admin.ModelAdmin):
        form = FooModelForm
        fields = "__all__"

Outside the Django Admin:

To use the widget outside of the django admin, first create a form similar to the above but using the basic PagedownWidget:

from django import forms

from pagedown.widgets import PagedownWidget

from music.models import Album

class AlbumForm(forms.ModelForm):
    name = forms.CharField(widget=PagedownWidget())
    description = forms.CharField(widget=PagedownWidget())

    class Meta:
        model = Album
        fields = ["name", "description"]

Then define your urls/views:

from django.views.generic import FormView
from django.conf.urls import patterns, url

from music.forms import AlbumForm

urlpatterns = patterns('',
    url(r'^$', FormView.as_view(template_name="baz.html",

then create the template and load the javascipt and css required to create the editor:

        {{ }}
        <form ...>
            {{ form }}

Customizing the Widget

If you want to customize the widget, the easiest way is to simply extend it:

from pagedown.widgets import PagedownWidget

class MyNewWidget(PagedownWidget):
    template_name = '/custom/template.html'

    class Media:
        css = {
            'all': ('custom/stylesheets.css,)
        js = ('custom/javascript.js',)

Rendering Markdown

contrib.markdown was depreciated in Django 1.5 meaning you can no longer use the markdown filter in your template by default.

@wkcd has a good example of how to overcome by installing django-markdown-deux:

{% extends 'base.html' %}
{% load markdown_deux_tags %}

<p>{{ entry.body|markdown }}</p>


You can see a fully-fledged example of the widget in django-pagedown-example

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-pagedown-2.0.1.tar.gz (83.6 kB view hashes)

Uploaded Source

Built Distribution

django_pagedown-2.0.1-py3-none-any.whl (88.5 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page