--- /dev/null
+import re
+
+from django.contrib.auth.models import User
+from django.db import models
+from django.utils.safestring import mark_safe
+
+import commonmark
+
+class Post(models.Model):
+ title = models.CharField(max_length=256, null=True)
+ slug = models.SlugField()
+ author = models.ForeignKey(User, on_delete=models.CASCADE)
+ publication_utc = models.DateTimeField(null=True, blank=True)
+ body_markdown = models.TextField(null=True)
+
+ def __str__(self):
+ return self.title
+
+ @property
+ def body_html(self):
+ return mark_safe(commonmark.commonmark(self.body_markdown))
+
+ @property
+ def teaser_html(self):
+ paragraphs = re.split(r'\n(\s*\n)+', self.body_markdown)
+
+ if len(paragraphs) == 0:
+ return ''
+
+ teaser_markdown = paragraphs[0]
+
+ for p in paragraphs[1:]:
+ if len(teaser_markdown) > 512:
+ break
+ teaser_markdown += '\n\n' + p
+
+ return mark_safe(commonmark.commonmark(teaser_markdown))