為了讓博客文章具有良好的排版,顯示更加豐富的格式,我們使用 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)
但是很尷尬,操作完了我的代碼還是沒有高亮,先跳過這個坑吧