Django渲染Markdown文章目录的方法示例 对会读书的人来说,读一本书要做的第一件事,就是仔细阅读这本书的目录。阅读目录可以对整体内容有所了解,并清楚地知道感兴趣的部分在哪里,提高阅读质量。 博文也是同样的,好的目录对博主和读者都很有帮助。更进一步的是,还可以在目录中设置锚点,点击标题就立即前往该处,非常的方便。 文中的目录 之前我们已经为博文支持了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标签才能正确渲染 重新打开页面: 总结 完成了文章的目录功能,至此文章详情页面也比较完善了。 项目完整代码:Django_blog_tutorial 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持中文源码网。