16fe65dee7ed1e01b5ca4eb82255614c2f0a3d70
[styx.blog] / core / models.py
1 import re
2
3 from django.contrib.auth.models import User
4 from django.db import models
5 from django.utils.safestring import mark_safe
6
7 import commonmark
8
9 class Post(models.Model):
10     title = models.CharField(max_length=256, null=True)
11     slug = models.SlugField()
12     author = models.ForeignKey(User, on_delete=models.CASCADE)
13     publication_utc = models.DateTimeField(null=True, blank=True)
14     body_markdown = models.TextField(null=True)
15
16     def __str__(self):
17         return self.title
18
19     @property
20     def body_html(self):
21         return mark_safe(commonmark.commonmark(self.body_markdown))
22
23     @property
24     def teaser_html(self):
25         paragraphs = re.split(r'\n(\s*\n)+', self.body_markdown)
26
27         if len(paragraphs) == 0:
28             return ''
29
30         teaser_markdown = paragraphs[0]
31
32         for p in paragraphs[1:]:
33             if len(teaser_markdown) > 512:
34                 break
35             teaser_markdown += '\n\n' + p
36
37         return mark_safe(commonmark.commonmark(teaser_markdown))