Django渲染Markdown文章目录的方法示例

 更新时间:2019年01月02日 10:37:07   作者:杜赛  
这篇文章主要介绍了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

...

<div class="container">
 <div class="row">
  <!-- 将原有内容嵌套进新的div中 -->
  <div class="col-9">
   <h1 class="mt-4 mb-4">{{ article.title }}</h1>
   <div class="alert alert-success">
    ...
   </div>
  </div>

  <!-- 新增的目录 -->
  <div class="col-3 mt-4">
   <h4><strong>目录</strong></h4>
   <hr>
   <div>
    {{ toc|safe }}
   </div>
  </div>
 </div>
</div>

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

重新打开页面:

总结

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

项目完整代码:Django_blog_tutorial

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 如何将Python脚本打包成exe应用程序介绍

    如何将Python脚本打包成exe应用程序介绍

    大家好,本篇文章主要讲的是如何将Python脚本打包成exe应用程序介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • python 实现提取某个索引中某个时间段的数据方法

    python 实现提取某个索引中某个时间段的数据方法

    今天小编就为大家分享一篇python 实现提取某个索引中某个时间段的数据方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • Python制作exe文件简单流程

    Python制作exe文件简单流程

    在本篇文章里我们给大家分享了关于Python制作exe文件的相关知识点内容,有需要的朋友们学习下。
    2019-01-01
  • Django返回HTML文件的实现方法

    Django返回HTML文件的实现方法

    这篇文章主要介绍了Django返回HTML文件的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Python批量将csv文件转化成xml文件的实例

    Python批量将csv文件转化成xml文件的实例

    将 csv 格式转换成xml格式有许多方法,可以用数据库的方式,也有许多软件可以将 csv 转换成xml。但是比较麻烦,本文利用 Python 一键批量将 csv 文件转化成 xml 文件。
    2021-05-05
  • python实现带声音的摩斯码翻译实现方法

    python实现带声音的摩斯码翻译实现方法

    这篇文章主要介绍了python实现带声音的摩斯码翻译实现方法,涉及pygame模块操作及摩斯码实现技巧,需要的朋友可以参考下
    2015-05-05
  • python中startswith()和endswith()的用法详解

    python中startswith()和endswith()的用法详解

    Python startswith() 方法用于检查字符串是否是以指定子字符串开头,endswith()方法主要是用于判断字符串是否以指定字符或子字符串结尾,常用于判断文件类型,对python startswith()和endswith()用法相关知识感兴趣的朋友一起看看吧
    2021-10-10
  • 用python实现一个文件搜索工具

    用python实现一个文件搜索工具

    大家好,本篇文章主要讲的是用python实现一个搜索工具,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • Anaconda和Pycharm的安装配置教程分享

    Anaconda和Pycharm的安装配置教程分享

    这篇文章主要介绍了Anaconda和Pycharm的安装配置教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • python 成功引入包但无法正常调用的解决

    python 成功引入包但无法正常调用的解决

    这篇文章主要介绍了python 成功引入包但无法正常调用的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03

最新评论