Django搭建個人博客:使用Markdown語法書寫文章
上一章我們實現了文章詳情頁面。為了讓文章正文能夠進行標題、加粗、引用、代碼塊等不同的排版(像在Office中那樣!),我們將使用Markdown語法。
安裝Markdown
Markdown是一種輕量級的標記語言,它允許人們「使用易讀易寫的純文本格式編寫文檔,然後轉換成有效的或者HTML文檔。建議讀者一定要花五分鐘時間熟悉一下Markdown的語法,熟練後碼字效率一定會大幅提高。
關於Markdown語法看這裡:Markdown 語法介紹
安裝markdown也很簡單:進入虛擬環境,輸入指令pip install markdown
即可。
使用Markdown
為了將Markdown語法書寫的文章渲染為HTML文本,首先改寫article/views.py
的article_detail()
:
article/views.py
...
# 引入markdown模塊
import markdown
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)
代碼中markdown.markdown
語法接收兩個參數:第一個參數是需要渲染的文章正文article.body
;第二個參數載入了常用的語法擴展,markdown.extensions.extra
中包括了縮寫、表格等擴展,markdown.extensions.codehilite
則是後面要使用的代碼高亮擴展。
然後,修改templates/article/detail.html
中有關文章正文的部分:
templates/article/detail.html
...
# 在 article.body 後加上 |safe 過濾器
<p>{{ article.body|safe }}</p>
Django出於安全的考慮,會將輸出的HTML代碼進行轉義,這使得article.body
中渲染的HTML文本無法正常顯示。管道符|
是Django中過濾器的寫法,而|safe
就類似給article.body
貼了一個標籤,表示這一段字元不需要進行轉義了。
這樣就把Markdown語法配置好了。
啟動伺服器,在後臺中新錄入一條用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)
?```
返迴文章詳情,結果如下: