这篇文章将为大家详细讲解有关使用Django怎么渲染Markdown文章目录,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
成都创新互联-专业网站定制、快速模板网站建设、高性价比抚宁网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式抚宁网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖抚宁地区。费用合理售后完善,10余年实体公司更值得信赖。文中的目录
之前我们已经为博文支持了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怎么渲染Markdown文章目录就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。