博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django搭建个人博客:渲染Markdown文章目录
阅读量:6841 次
发布时间:2019-06-26

本文共 2001 字,大约阅读时间需要 6 分钟。

对会读书的人来说,读一本书要做的第一件事,就是仔细阅读这本书的目录。阅读目录可以对整体内容有所了解,并清楚地知道感兴趣的部分在哪里,提高阅读质量。

博文也是同样的,好的目录对博主和读者都很有帮助。更进一步的是,还可以在目录中设置锚点,点击标题就立即前往该处,非常的方便。

文中的目录

之前我们已经为博文支持了Markdown语法,现在继续增强其功能。

有折腾代码高亮的痛苦经历之后,设置Markdown的目录扩展就显得特别轻松了。

修改文章详情视图:

article/views.py...# 文章详情def article_detail(request, id):    ...    article.body = markdown.markdown(article.body,        extensions=[        'markdown.extensions.extra',        'markdown.extensions.codehilite',                    # 目录扩展        'markdown.extensions.TOC',        ]    )    ...复制代码

仅仅是将将markdown.extensions.TOC扩展添加了进去。

TOC: Table of Contents,即目录的意思

代码增加这一行就足够了。为了方便测试,往之前的文章中添加几个一级标题、二级标题等。

还记得Markdown语法如何写标题吗?一级标题:# title1,二级标题:## title2

然后你可以在文中的任何地方插入[TOC]字符串,目录就自动生成好了:

点击标题,页面就立即前往相应的标题处(即“锚点”的概念)。

任意位置的目录

上面的方法只能将目录插入到文章当中。如果我想把目录插入到页面的任何一个位置呢?

也简单,这次需要修改Markdown的渲染方法:

article/views.py...def article_detail(request, id):    ...    # 修改 Markdown 语法渲染    md = markdown.Markdown(        extensions=[        'markdown.extensions.extra',        'markdown.extensions.codehilite',        'markdown.extensions.toc',        ]    )    article.body = md.convert(article.body)    # 新增了md.toc对象    context = { 'article': article, 'toc': md.toc }    return render(request, 'article/detail.html', context)复制代码

为了能将toc单独提取出来,我们先将Markdown类赋值给一个临时变量md,然后用convert()方法将正文渲染为html页面。通过md.toc将目录传递给模板。

注意markdown.markdown()markdown.Markdown()的区别

更详细的解释见:

为了将新的目录渲染到页面中,需要修改文章详情模板:

templates/article/detail.html...

{
{ article.title }}

...

目录


{
{ toc|safe }}
...复制代码
  • 重新布局,将原有内容装进col-9的容器中,将右侧col-3的空间留给目录
  • toc需要|safe标签才能正确渲染

重新打开页面:

总结

完成了文章的目录功能,至此文章详情页面也比较完善了。

  • 有疑问请在留言,我会尽快回复。
  • 或Email私信我:dusaiphoto@foxmail.com
  • 项目完整代码:

转载请注明出处。

转载于:https://juejin.im/post/5c2b132951882546150b17d1

你可能感兴趣的文章
首次公开!阿里搜索中台开发运维一体化实践
查看>>
面象对象设计6大原则之四:接口隔离原则
查看>>
Ansible介绍、安装、远程执行命令、拷贝文件或者目录、远程执行脚本
查看>>
异常中要了解的Throwable类中的几个方法
查看>>
【前端,干货】react and redux教程学习实践(二)。
查看>>
Fiddler 抓包浅析(二)
查看>>
Ant + Tomcat + Jenkins 实现自动化部署
查看>>
奥迪明年将在美推出汽车共享车队
查看>>
万达网络首席架构师:回复雷盈CEO,致敬区块链创业者!
查看>>
阿里达摩院布局“中国芯”,自研AI芯片性价比超同类40倍
查看>>
ShowDoc v2.4.10 发布,IT 团队的在线 API 文档工具
查看>>
Macaca入门篇(iOS)
查看>>
甲骨文宣布开源 GraphPipe,一种机器学习模型的新标准
查看>>
使用Eclipse开发Java应用并部署到SAP云平台SCP上去
查看>>
区块链:重新定义世界,崛起于草根的“颠覆性”技术
查看>>
为保证太空超级计算机可长期使用,惠普宣布已成功为其加电
查看>>
SqlMap 初尝试
查看>>
Python学习笔记-邮件模块SMTP
查看>>
限制优化时间和事件数的最佳方法
查看>>
金州勇士队采用可眼动追踪VR头显,检测球员的伤势情况
查看>>