一、本次任务
- 文章内部添加目录
- 文章目录写在文章外部
- 处理文章目录为空的情况
- 美化文章锚点显示路径
二、操作截图
md = markdown.Markdown(extensions=[
'markdown.extensions.extra',
'markdown.extensions.codehilite',
'markdown.extensions.toc'
])
post.body = md.convert(post.body)
post.toc = md.toc # 动态添加属性
![content toc out of article](https://img-blog.csdnimg.cn/ca4ce2e7469045388b35d8d03a02a645.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU2FwcGhpcmXvvZ4=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
- 处理空目录
去掉一级二级标题,制造出一个空目录 右侧用if 判断也还是如下效果: ![empty toc](https://img-blog.csdnimg.cn/9eba5b8fad2543d2a3403ce4fac02e70.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU2FwcGhpcmXvvZ4=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center) 处理空目录代码如下,注意一个单引号双引号也会导致达不到如期效果的:
import re
md = markdown.Markdown(extensions=[
'markdown.extensions.extra',
'markdown.extensions.codehilite',
'markdown.extensions.toc'
])
post.body = md.convert(post.body)
# re matching out empty directory
# wrong
# m = re.search(r"<div class='toc'>\s*<ul>(.*)</ul>\s*</div>", md.toc, re.S)
# right
m = re.search(r'<div class="toc">\s*<ul>(.*)</ul>\s*</div>', md.toc, re.S)
post.toc = m.group(1) if m else ''
![empty toc do not show](https://img-blog.csdnimg.cn/4f43e7271d1b46068ccfeb9226c65379.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU2FwcGhpcmXvvZ4=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
- 点击锚点,优化显示路径:
![锚点 url](https://img-blog.csdnimg.cn/ff038fb98d524233aac396be5d38de0d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU2FwcGhpcmXvvZ4=,size_11,color_FFFFFF,t_70,g_se,x_16#pic_center) 代码:
from django.utils.text import slugify
from markdown.extensions.toc import TocExtension
md = markdown.Markdown(extensions=[
'markdown.extensions.extra',
'markdown.extensions.codehilite',
# 'markdown.extensions.toc'
TocExtension(slugify=slugify)
])
优化后,显示的就可以是中文的,跟层级标题一样 ![right maodian url](https://img-blog.csdnimg.cn/15bf99ba13fd4413b1dfd92c07a7d9ef.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU2FwcGhpcmXvvZ4=,size_13,color_FFFFFF,t_70,g_se,x_16#pic_center)
三、问题总结
- 第一次发现动态属性可以这么用,为什么有时候就会报错没有这个属性呢?
- 关于正则空目录的写法,有点不懂?
- 需要经常总结常用知识点,熟能生巧。
附上 Gitee 地址:https://gitee.com/langxing/HelloDjango-blog-tutorial
|