Get a basic blog up and running
[styx.blog] / core / models.py
diff --git a/core/models.py b/core/models.py
new file mode 100644 (file)
index 0000000..16fe65d
--- /dev/null
@@ -0,0 +1,37 @@
+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))