Skip to content

Commit 933fbdd

Browse files
author
yangxg
committed
Step17: generate excerpt automatically
1 parent d3a726c commit 933fbdd

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

blog/models.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1+
import markdown
2+
13
from django.db import models
24
from django.contrib.auth.models import User
35
from django.urls import reverse
46
from django.utils.six import python_2_unicode_compatible
7+
from django.utils.html import strip_tags
58

69

710
# python_2_unicode_compatible 装饰器用于兼容 Python2
@@ -88,3 +91,19 @@ class Meta:
8891
def increase_views(self):
8992
self.views += 1
9093
self.save(update_fields=['views'])
94+
95+
def save(self, *args, **kwargs):
96+
# 如果没有填写摘要
97+
if not self.excerpt:
98+
# 首先实例化一个 Markdown 类,用于渲染 body 的文本
99+
md = markdown.Markdown(extensions=[
100+
'markdown.extensions.extra',
101+
'markdown.extensions.codehilite',
102+
])
103+
# 先将 Markdown 文本渲染成 HTML 文本
104+
# strip_tags 去掉 HTML 文本的全部 HTML 标签
105+
# 从文本摘取前 54 个字符赋给 excerpt
106+
self.excerpt = strip_tags(md.convert(self.body))[:54]
107+
108+
# 调用父类的 save 方法将数据保存到数据库中
109+
super(Post, self).save(*args, **kwargs)

templates/blog/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ <h1 class="entry-title">
1919
</div>
2020
</header>
2121
<div class="entry-content clearfix">
22-
<p>{{ post.excerpt }}</p>
22+
<p>{{ post.excerpt }}...</p>
2323
<div class="read-more cl-effect-14">
2424
<a href="{{ post.get_absolute_url }}" class="more-link">继续阅读 <span class="meta-nav"></span></a>
2525
</div>

0 commit comments

Comments
 (0)