基于Django的Blog 8.使用Markdown语法书写文章
使用Markdown语法书写文章
1.Markdown安装
pip install markdown
2.使用Markdown
2.1 将Markdown语法书写的文章渲染为HTML文本,
article/views.py
# 文章详情
def article_detail(request, id):
# 取出相应的文章
article = ArticlePost.objects.get(id=id)
# 将markdwon语法渲染成html样式
article.body = markdown.markdown(article.body,
extensions=[
# 包含缩写, 表格等常用扩展
'markdown.extensions.extra',
# 语法高亮扩展
'markdown.extensions.codehilite',
])
# 传递给模板的对象
context = { 'article': article }
# 载入模板
return render(request, 'article/detail.html', context)
2.2 修改文章正文部分的模板
templates/article/detail.html
...
# 在 article.body 后加上 |safe 过滤器
<p>{{ article.body|safe }}</p>
Django出于安全的考虑, 会将输出的HTML代码进行转义, 这使得article.body中渲染的HTML文本无法显示.管道符|是Django中过滤器的写法,而|safe就类似给article.body贴了一个标签,表示这段话不需要转义.
也就是说当你在正文输入了markdown格式的文字时,views通过新的article_detail方法,将markdown文字转化为html展现出来,但是中途会遇到django的安全转义,在html中添加|safe就不会对其转义了.
启动服务器
录入一条用markdown语法书写的文章
# 国风·周南·关雎
---
**关关雎鸠,在河之洲。窈窕淑女,君子好逑。**
参差荇菜,左右流之。窈窕淑女,寤寐求之。
---
+ 列表一
+ 列表二
+ 列表二-1
+ 列表二-2
---
```python
def article_detail(request, id):
article = ArticlePost.objects.get(id=id)
# 将markdown语法渲染成html样式
article.body = markdown.markdown(article.body,
extensions=[
# 包含 缩写、表格等常用扩展
'markdown.extensions.extra',
# 语法高亮扩展
'markdown.extensions.codehilite',
])
context = { 'article': article }
return render(request, 'article/detail.html', context)
```
3. 代码高亮
static目录中新建一个目录md_css/,一会儿放置代码高亮的样式文件
pygments是一种通用语法高亮显示器,可以自动生成梅花代码块的样式文件
pip install Pygments
cd到static/md_css/
pygmentize -S monokai -f html -a .codehilite > monokai.css
回车后检查一下,在md_css目录中是否自动生成了一个叫monokai.css的文件,这是一个深色背景的高亮样式文件。
接下来我们在base.html中引用这个文件:
templates/base.html
<head>
...
<link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.min.css' %}">
<!-- 引入monikai.css -->
<link rel="stylesheet" href="{% static 'md_css/monokai.css' %}">
</head>
...
重新启动服务器,顺利的话看到如下:
Perfect! 成功~
各种不同样式可以在这里参照:pygments-css
posted on 2020-07-05 20:57 sunnywillow 阅读(131) 评论(0) 收藏 举报
浙公网安备 33010602011771号