You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.1 KiB
39 lines
1.1 KiB
# -*- coding: utf-8 -*- |
|
from __future__ import unicode_literals |
|
|
|
from django.db import models |
|
from django.utils.translation import ugettext_lazy as _ |
|
from django.utils.safestring import mark_safe |
|
from django.utils.html import conditional_escape, linebreaks |
|
|
|
from .utils import markdown_to_html |
|
|
|
|
|
class MarkupContent(models.Model): |
|
PLAIN_TEXT = 'text/plain' |
|
MARKDOWN = 'text/x-markdown' |
|
HTML = 'text/html' |
|
MARKUP_FORMATS = ( |
|
(MARKDOWN, _("Markdown")), |
|
(PLAIN_TEXT, _("Reiner Text")), |
|
(HTML, _("HTML")), |
|
) |
|
markup_format = models.CharField(max_length=20, choices=MARKUP_FORMATS, default=MARKDOWN) |
|
text = models.TextField() |
|
|
|
class Meta: |
|
abstract = True |
|
|
|
def render(self, inline=False, **kwargs): |
|
# TODO Use request? |
|
|
|
if self.markup_format == self.MARKDOWN: |
|
# Marked safe by the markdown converter |
|
return markdown_to_html(self.text, inline=inline) |
|
|
|
elif self.markup_format == self.HTML: |
|
return mark_safe(self.text) |
|
|
|
else: |
|
# TODO Use linebreaks filter |
|
return linebreaks(conditional_escape(self.text))
|
|
|