参考教程
https://neutronx.github.io/django-markdownx/
笔记
安装
# 把 markdown 语法解析成 html 标签
pip install markdown
原理就是每次再返回文章内容之前,使用 markdown 再做一次处理。
blog/views.py
import markdown
from django.shortcuts import render, get_object_or_404
from .models import Post
def detail(request, pk):
post = get_object_or_404(Post, pk=pk)
# 记得在顶部引入 markdown 模块
post.body = markdown.markdown(post.body,
extensions=[
'markdown.extensions.extra',
'markdown.extensions.codehilite',
'markdown.extensions.toc',
])
return render(request, 'blog/detail.html', context={'post': post})
safe 标签
Django 出于安全方面的考虑,任何的 HTML 代码在 Django 的模板中都会被转义(即显示原始的 HTML 代码,而不是经浏览器渲染后的格式)。为了解除转义,只需在模板标签使用 safe 过滤器即可,告诉 Django,这段文本是安全的,你什么也不用做。在模板中找到展示博客文章主体的 {{ post.body }} 部分,为其加上 safe 过滤器,{{ post.body|safe }}
代码高亮
安装一个第三方库,这个库应该会被 python-markdown 这个库调用,给代码加上 html 标签用的。这个工作的代码量应该挺大的,所以就没集成到 python-markdown 里面去。
# 代码高亮
pip install Pygments
添加一个样式文件。在项目的 blog\static\blog\css\highlights\ 目录下应该能看到很多 .css 样式文件,这些文件是用来提供代码高亮样式的。选择一个你喜欢的样式文件,在 base.html 引入即可(别忘了使用 static 模板标签)。比如我比较喜欢 github.css 的样式,那么引入这个文件:
templates/base.html
...
<link rel="stylesheet" href="{% static 'blog/css/pace.css' %}">
<link rel="stylesheet" href="{% static 'blog/css/custom.css' %}">
...
+ <link rel="stylesheet" href="{% static 'blog/css/highlights/github.css' %}">
这部分主要踩的坑是,代码好像没有高亮:
- 点击 css 的链接,看页面是否 404,404 说明配置的地址有问题;
- 确认地址没问题,还是没效果的化,可以多写点代码试试,可能是缺少关键字;
- 清除浏览器的缓存文件、重启服务器再次尝试。
网友评论