Using another markup language for forum posts

Django-machina uses Markdown as the default syntax for forum messages, which is provided by the use of a built-in widget using the EasyMDE Markdown editor. But you can easily change this in your settings. We will see how to do this.

It should be noted that django-machina relies on specific model fields to store forum messages. These fields contribute two columns to the model where they are used: the first one is used to store any content written by using a markup language (eg. BBCode or Markdown) and the second one keeps the rendered content obtained by converting the initial content to HTML. Thus forum messages are stored in two versions: plain and HTML.

Example: using django-ckeditor

Let’s use django-ckeditor instead of the default widget in order to benefit from a powerful wysiwyg editor.

The first thing to do is to add ckeditor in our INSTALLED_APPS setting:

INSTALLED_APS = (
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.sites',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'django.contrib.admin',

  # Machina related apps:
  'mptt',
  'haystack',
  'widget_tweaks',
  'ckeditor',

  # Machina apps:
  'machina',
  'machina.apps.forum',
  'machina.apps.forum_conversation',
  'machina.apps.forum_conversation.forum_attachments',
  'machina.apps.forum_conversation.forum_polls',
  'machina.apps.forum_feeds',
  'machina.apps.forum_moderation',
  'machina.apps.forum_search',
  'machina.apps.forum_tracking',
  'machina.apps.forum_member',
  'machina.apps.forum_permission',
)

Then we must set the MACHINA_MARKUP_LANGUAGE and MACHINA_MARKUP_WIDGET settings in order to tell django-machina the widget to use when displaying forms:

MACHINA_MARKUP_LANGUAGE = None
MACHINA_MARKUP_WIDGET = 'ckeditor.widgets.CKEditorWidget'

When using a wysiwyg editor such as CKEditor we do not use a specific markup language because we directly get the content in HTML. This is why the MACHINA_MARKUP_LANGUAGE setting is set to None. The MACHINA_MARKUP_WIDGET indicates the Python dotted path to the CKEditor form widget.

The last thing to do is to ensure that you use the required assets in your templates. Basically, you have to ensure that the media property is used in your form templates (this is the case if you have not modified the default topic/post templates):

{% block css %}
  {{ block.super }}
  {{ post_form.media.css }}
{% endblock css %}

{% block js %}
  {{ block.super }}
  {{ post_form.media.js }}
{% endblock js %}