Django-Markdown排版、語法高亮及博客目錄


為了讓博客文章具有良好的排版,顯示更加豐富的格式,我們使用 Markdown 語法來書寫我們的博文。Markdown 是一種 HTML 文本標(biāo)記語言,只要遵循它約定的語法格式,Markdown 的渲染器就能夠把我們寫的文章轉(zhuǎn)換為標(biāo)準(zhǔn)的 HTML 文檔,從而讓我們的文章呈現(xiàn)更加豐富的格式,例如標(biāo)題、列表、代碼塊等等 HTML 元素。由于 Markdown 語法簡單直觀,不用超過 5 分鐘就可以掌握常用的標(biāo)記語法,因此大家青睞使用 Markdown 書寫 HTML 文檔。下面讓我們的博客也支持使用 Markdown 書寫。

安裝Markdown

在命令行里面直接pip install markdown

在 detail 視圖中渲染 Markdown

我們書寫的博客文章內(nèi)容存在 Post 的 body 屬性里,回到我們的詳情頁視圖函數(shù),對 post 的 body 的值做一下渲染,把 Markdown 文本轉(zhuǎn)為 HTML 文本再傳遞給模板:

blog/views.py

import markdown


def detail(request, blog_id):
    entry = models.Entry.objects.get(id=blog_id)
    md = markdown.Markdown(extensions=[
        'markdown.extensions.extra',
        'markdown.extensions.codehilite',
        'markdown.extensions.toc',
    ])
    entry.body = md.convert(entry.body)
    entry.toc = md.toc
    return render(request, 'blog/detail.html', locals())

safe 標(biāo)簽

我們在發(fā)布的文章詳情頁沒有看到預(yù)期的效果,而是類似于一堆亂碼一樣的 HTML 標(biāo)簽,這些標(biāo)簽本應(yīng)該在瀏覽器顯示它本身的格式,但是 Django 出于安全方面的考慮,任何的 HTML 代碼在 Django 的模板中都會被轉(zhuǎn)義(即顯示原始的 HTML 代碼,而不是經(jīng)瀏覽器渲染后的格式)。為了解除轉(zhuǎn)義,只需在模板標(biāo)簽使用 safe 過濾器即可,告訴 Django,這段文本是安全的,你什么也不用做。在模板中找到展示博客文章主體的 {{ post.body }} 部分,為其加上 safe 過濾器,{{ post.body|safe }},大功告成,這下看到預(yù)期效果了。

safe 是 Django 模板系統(tǒng)中的過濾器(Filter),可以簡單地把它看成是一種函數(shù),其作用是作用于模板變量,將模板變量的值變?yōu)榻?jīng)過濾器處理過后的值。例如這里 {{ post.body|safe }},本來 {{ post.body }} 經(jīng)模板系統(tǒng)渲染后應(yīng)該顯示 body 本身的值,但是在后面加上 safe 過濾器后,渲染的值不再是body 本身的值,而是由 safe 函數(shù)處理后返回的值。過濾器的用法是在模板變量后加一個 | 管道符號,再加上過濾器的名稱??梢赃B續(xù)使用多個過濾器,例如 {{ var|filter1|filter2 }}。


代碼高亮

  • 安裝pygments
  • 引入css樣式文件(github.css)

但是很尷尬,操作完了我的代碼還是沒有高亮,先跳過這個坑吧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容