摘要:注意如果你按照教程中的方法做完后發(fā)現代碼依然沒有高亮,請依次檢查以下步驟確保在渲染文本時添加了拓展,詳情見上文。有些樣式文件可能對代碼高亮沒有作用,首先嘗試用樣式文件做測試。在支持語法和代碼高亮追夢人物的博客的評論區(qū)留言。
為了讓博客文章具有良好的排版,顯示更加豐富的格式,我們使用 Markdown 語法來書寫我們的博文。Markdown 是一種 HTML 文本標記語言,只要遵循它約定的語法格式,Markdown 的渲染器就能夠把我們寫的文章轉換為標準的 HTML 文檔,從而讓我們的文章呈現更加豐富的格式,例如標題、列表、代碼塊等等 HTML 元素。由于 Markdown 語法簡單直觀,不用超過 5 分鐘就可以掌握常用的標記語法,因此大家青睞使用 Markdown 書寫 HTML 文檔。下面讓我們的博客也支持使用 Markdown 書寫。
安裝 Python Markdown將 Markdown 格式的文本渲染成標準的 HTML 文檔是一個復雜的工作,好在已有好心人幫我們完成了這些工作,我們直接使用即可。首先安裝 Markdown,這是一個 Python 第三方庫,激活虛擬環(huán)境,然后使用命令 pip install markdown 安裝即可。
在 detail 視圖中渲染 Markdown將 Markdown 格式的文本渲染成 HTML 文本非常簡單,只需調用這個庫的 markdown 方法即可。我們書寫的博客文章內容存在 Post 的 body 屬性里,回到我們的詳情頁視圖函數,對 post 的 body 的值做一下渲染,把 Markdown 文本轉為 HTML 文本再傳遞給模板:
blog/views.py import markdown from django.shortcuts import render, get_object_or_404 from .models import Post def detail(request, pk): post = get_object_or_404(Post, pk=pk) # 記得在頂部引入 markdown 模塊 post.body = markdown.markdown(post.body, extensions=[ "markdown.extensions.extra", "markdown.extensions.codehilite", "markdown.extensions.toc", ]) return render(request, "blog/detail.html", context={"post": post})
這樣我們在模板中展示 {{ post.body }} 的時候,就不再是原始的 Markdown 文本了,而是渲染過后的 HTML 文本。注意這里我們給 markdown 渲染函數傳遞了額外的參數 extensions,它是對 Markdown 語法的拓展,這里我們使用了三個拓展,分別是 extra、codehilite、toc。extra 本身包含很多拓展,而 codehilite 是語法高亮拓展,這為我們后面的實現代碼高亮功能提供基礎,而 toc 則允許我們自動生成目錄(在以后會介紹)。
來測試一下效果,進入后臺,這次我們發(fā)布一篇用 Markdown 語法寫的測試文章看看,你可以使用以下的 Markdown 測試代碼進行測試,也可以自己書寫你喜歡的 Markdown 文本。假設你是 Markdown 新手參考一下這些教程,一定學一下,保證你可以在 5 分鐘內掌握常用的語法格式,而以后對你寫作受用無窮。可謂充電五分鐘,通話 2 小時。以下是我學習中的一些參考資料:
Markdown——入門指南
Markdown 語法說明 (簡體中文版)
# 一級標題 ## 二級標題 ### 三級標題 - 列表項1 - 列表項2 - 列表項3 > 這是一段引用 ?```python def detail(request, pk): post = get_object_or_404(Post, pk=pk) post.body = markdown.markdown(post.body, extensions=[ "markdown.extensions.extra", "markdown.extensions.codehilite", "markdown.extensions.toc", ]) return render(request, "blog/detail.html", context={"post": post}) ?```
如果你發(fā)現無法顯示代碼塊,即代碼無法換行,請檢查代碼塊的語法是否書寫有誤。代碼塊的語法如上邊的測試文本中最后一段所示。
你可能想在文章中插入圖片,目前能做的且推薦做的是使用外鏈引入圖片。比如將圖片上傳到七牛云這樣的云存儲服務器,然后通過 Markdown 的圖片語法將圖片引入。Markdown 引入圖片的語法為:![圖片說明](圖片鏈接)。
safe 標簽我們在發(fā)布的文章詳情頁沒有看到預期的效果,而是類似于一堆亂碼一樣的 HTML 標簽,這些標簽本應該在瀏覽器顯示它本身的格式,但是 Django 出于安全方面的考慮,任何的 HTML 代碼在 Django 的模板中都會被轉義(即顯示原始的 HTML 代碼,而不是經瀏覽器渲染后的格式)。為了解除轉義,只需在模板標簽使用 safe 過濾器即可,告訴 Django,這段文本是安全的,你什么也不用做。在模板中找到展示博客文章主體的 {{ post.body }} 部分,為其加上 safe 過濾器,{{ post.body|safe }},大功告成,這下看到預期效果了。
safe 是 Django 模板系統中的過濾器(Filter),可以簡單地把它看成是一種函數,其作用是作用于模板變量,將模板變量的值變?yōu)榻涍^濾器處理過后的值。例如這里 {{ post.body|safe }},本來 {{ post.body }} 經模板系統渲染后應該顯示 body 本身的值,但是在后面加上 safe 過濾器后,渲染的值不再是body 本身的值,而是由 safe 函數處理后返回的值。過濾器的用法是在模板變量后加一個 | 管道符號,再加上過濾器的名稱。可以連續(xù)使用多個過濾器,例如 {{ var|filter1|filter2 }}。
代碼高亮程序員寫博客免不了要插入一些代碼,Markdown 的語法使我們容易地書寫代碼塊,但是目前來說,顯示的代碼塊里的代碼沒有任何顏色,很不美觀,也難以閱讀,要是能夠像我們的編輯器里一樣讓代碼高亮就好了。雖然我們在渲染時使用了 codehilite 拓展,但這只是實現代碼高亮的第一步,還需要簡單的幾步才能達到我們的最終目的。
安裝 Pygments首先我們需要安裝 Pygments,激活虛擬環(huán)境,運行: pip install Pygments 安裝即可。
搞定了,雖然我們除了安裝了一下 Pygments 什么也沒做,但 Markdown 使用 Pygments 在后臺為我們做了很多事。如果你打開博客詳情頁,找到一段代碼段,在瀏覽器查看這段代碼段的 HTML 源代碼,可以發(fā)現 Pygments 的工作原理是把代碼切分成一個個單詞,然后為這些單詞添加 css 樣式,不同的詞應用不同的樣式,這樣就實現了代碼顏色的區(qū)分,即高亮了語法。為此,還差最后一步,引入一個樣式文件來給這些被添加了樣式的單詞定義顏色。
引入樣式文件在項目的 blogstaticblogcsshighlights 目錄下應該能看到很多 .css 樣式文件,這些文件是用來提供代碼高亮樣式的。選擇一個你喜歡的樣式文件,在 base.html 引入即可(別忘了使用 static 模板標簽)。比如我比較喜歡 github.css 的樣式,那么引入這個文件:
templates/base.html ... ... +
這里 + 號表示添加這行代碼。好了,看看效果,大功告成,終于可以愉快地貼代碼了。
注意:如果你按照教程中的方法做完后發(fā)現代碼依然沒有高亮,請依次檢查以下步驟:
確保在渲染文本時添加了 markdown.extensions.codehilite 拓展,詳情見上文。
確保安裝了 Pygments。
確保代碼塊的 Markdown 語法正確,特別是指明該代碼塊的語言類型,具體請參見上文中 Markdown 的語法示例。
在瀏覽器端代碼塊的源代碼,看代碼是否被 pre 標簽包裹,并且代碼的每一個單詞都被 span 標簽包裹,且有一個 class 屬性值。如果沒有,極有可能是前三步中某個地方出了問題。
確保用于代碼高亮的樣式文件被正確地引入,具體請參見上文中引入樣式文件的講解。
有些樣式文件可能對代碼高亮沒有作用,首先嘗試用 github.css 樣式文件做測試。
總結本章節(jié)的代碼位于:Step9: markdown and code highlight supported。
如果遇到問題,請通過下面的方式尋求幫助。
在 支持 Markdown 語法和代碼高亮 - 追夢人物的博客 的評論區(qū)留言。
將問題的詳細描述通過郵件發(fā)送到 djangostudyteam@163.com,一般會在 24 小時內回復。
更多Django 教程,請訪問 追夢人物的博客。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44396.html
摘要:本教程內容已過時,更新版教程請訪問博客開發(fā)入門教程。當分頁較多時,總是顯示當前頁及其前幾頁和后幾頁的頁碼教程中使用的是兩頁,其他頁碼用省略號代替。 本教程內容已過時,更新版教程請訪問: django 博客開發(fā)入門教程。 摘要:前兩期教程我們實現了博客的 Model 部分,以及 Blog 的首頁視圖 IndexView,詳情頁面 DetailView,以及分類頁面 CategoryVi...
摘要:語法支持再次打開文件,在文件的最后添加指明了使用語法標記,做了兩個拓展,其中表示支持語法高亮,包含的特性請參見相關文檔。語法高亮支持注意這一步必須在安裝完主題之后。 目前網上搭建個人博客的方案很多,雖然使用諸如 Wordpress ( PHP )、Hexo ( Node.js ) 等可以方便快速地搭建一款功能齊全的高性能個人博客,但是本文將嘗試一種更為小眾化的方案 —— 一款基于 dj...
摘要:本教程內容已過時,更新版教程請訪問博客開發(fā)入門教程。表示降序排列,默認是升序排列。學習小組簡介學習小組是一個促進新手互相學習互相幫助的組織。我們會將每周的詳細開發(fā)文檔和代碼通過郵件列表發(fā)出。 本教程內容已過時,更新版教程請訪問: django 博客開發(fā)入門教程。 通過前四周的時間我們開發(fā)了一個簡單的個人 Blog,教程地址: 第一周:Django 學習小組:博客開發(fā)實戰(zhàn)第一周教程 ——...
摘要:重新打開一個命令行窗口,進入虛擬環(huán)境,安裝是一種通用語法高亮顯示器,可以幫助我們自動生成美化代碼塊的樣式文件。 上一章我們實現了文章詳情頁面。為了讓文章正文能夠進行標題、加粗、引用、代碼塊等不同的排版(像在Office中那樣!),我們將使用Markdown語法。 安裝Markdown Markdown是一種輕量級的標記語言,它允許人們使用易讀易寫的純文本格式編寫文檔,然后轉換成有效的或...
摘要:博文也是同樣的,好的目錄對博主和讀者都很有幫助。文中的目錄之前我們已經為博文支持了語法,現在繼續(xù)增強其功能。修改文章詳情視圖文章詳情目錄擴展僅僅是將將擴展添加了進去。通過將目錄傳遞給模板。 對會讀書的人來說,讀一本書要做的第一件事,就是仔細閱讀這本書的目錄。閱讀目錄可以對整體內容有所了解,并清楚地知道感興趣的部分在哪里,提高閱讀質量。 博文也是同樣的,好的目錄對博主和讀者都很有幫助。更...
閱讀 1776·2021-11-11 11:02
閱讀 1679·2021-09-22 15:55
閱讀 2482·2021-09-22 15:18
閱讀 3487·2019-08-29 11:26
閱讀 3742·2019-08-26 13:43
閱讀 2646·2019-08-26 13:32
閱讀 896·2019-08-26 10:55
閱讀 964·2019-08-26 10:27