Markdown是一種輕量級的标記語言,它允許人們使用易讀易寫的純文字格式編寫文檔,然後轉換成有效的或者HTML文檔。
一、安裝Markdown
進入虛拟環境,輸入如下指令:
pip install
二、使用Markdown
為了将Markdown文法書寫的文字渲染為HTML文本,須做如下更改:
2.1、修改article/views.py的article_detail()
...
# 文章詳情
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 }
# 載入模闆,并傳回context對象
return render(request, 'article/detail.html', context)
-
文法接收兩個參數:第一個參數是需要渲染的文章正文markdown.markdown
;第二個參數載入了常用的文法擴充;article.body
-
中包括了縮寫、表格等擴充;markdown.extensions.extra
-
這是後面要使用的代碼高亮擴充;markdown.extensions.codehilite
2.2、修改templates/article/detail.html
<!-- extends表明此頁面繼承自base.html檔案 -->
{% extends "base.html" %}
{% load staticfiles %}
<!-- 寫入base.html中定義的title -->
{% block title %}
文章詳情
{% endblock title %}
<!-- 寫入base.html中定義的content -->
{% block content %}
<!-- 文章詳情 -->
<div class="container">
<div class="row">
<!-- 标題及作者 -->
<h1 class="col-l2 mt-4 mb-4">{{ article.title }}</h1>
<div class="col-l2 alert alert-success">作者:{{ article.author }}</div>
<!-- 文章正文 -->
<div class="col-l2">
# 在 article.body後加上 |safe 過濾器
<p>{{ article.body|safe }}</p>
</div>
</div>
</div>
- Django出于安全的考慮,會将輸出的HTML代碼進行轉義,這使得
中渲染的HTML文本無法正常顯示。管道符article.body
是Django中過濾器的寫法,而|
就類似給|safe
貼了一個标簽,表示這一段字元就不需要轉義了。article.body
2.3、代碼高亮
在
static
目錄中建立一個目錄
md_css/
,一會放置代碼高亮的樣式檔案。
重新打開一個指令行視窗,進入虛拟環境,安裝
Pygments
:
pip install
Pygments
是一種通用文法高亮顯示器,可以幫助我們自動生成美化代碼塊的樣式檔案。
在指令行中進入剛剛建立的
md_css
目錄中,輸入
Pygments
指令:
pygmentize -S monokai -f html -a .codehilite > monokai.css
回車後檢查一下,在
md_css
目錄中是否自動生成了一個叫
monokai.css
的檔案,這是一個深色背景的高亮樣式檔案。
除了Monokai這個深色的樣式外,Pygments還内置了很多其他的樣式,可以自行選擇:pygments-css
2.4、引用monokai.css
在
base.html
中引用這個檔案:
<!-- 載入靜态檔案 -->
{% load staticfiles %}
<!DOCTYPE html>
<!-- 網站主語言 -->
<html lang="zh-cn">
<head>
<!-- 網站采用的字元編碼 -->
<meta charset="utf-8">
<!-- 預留網站标題的位置 -->
<title>{% block title %}{% endblock %}</title>
<!-- 引入bootstrap的css檔案 -->
<link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.min.css' %}">
<!-- 引入monokai.css -->
<link rel="stylesheet" href="{% static 'md_css/monokai.css' %}">
</head>
<body>
...
</body>
</html>
三、檢視效果
# 國風·周南·關雎
---
**關關雎鸠,在河之洲。窈窕淑女,君子好逑。**
參差荇菜,左右流之。窈窕淑女,寤寐求之。
---
+ 清單一
+ 清單二
+ 清單二-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)