天天看點

Django搭建個人部落格--引入Markdown文法

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代碼進行轉義,這使得​

    ​article.body​

    ​​中渲染的HTML文本無法正常顯示。管道符​

    ​|​

    ​​是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)