當前位置:
首頁 > 知識 > 靜態站點生成器:makesite.py

靜態站點生成器:makesite.py

靜態站點生成器:makesite.py

通過在Python中編寫自己的簡單、輕量級、無魔法的靜態站點生成器,完全控制靜態網站/博客生成。對的!重新發明輪子,夥計們!

目錄

  • 簡介

  • 但是為什麼呢?

  • 開始

  • 代碼

  • 布局

  • 內容

  • 信用

  • 許可證

  • 支持

簡介

這個庫包含一個含兩個靜態博客和幾個靜態頁面的網站例子的源代碼。網站通過運行makesite.py生成。結果像這個例子(https://tmug.github.io/makesite-demo)。就這樣!

因此,請繼續,創建此庫的分支,替換成自己的內容,並生成靜態網站。 就這麼簡單!

您可以自由地為博客或網站複製,使用和修改此項目,因此請繼續並分發此庫並將其作為自己的項目。 如果願意,可以更改布局,根據自己的想法改進樣式表,如果需要可以增強makesite.py,並按照需要開發網站/博客。

但是為什麼?

為了娛樂和利潤! 好吧,也許不是為了贏利,而是希望有趣。

你有沒有使用像Jekyll這樣流行的靜態網站生成器來生成你的博客? 我也有過。 它很簡單,很棒。 但是,您是否渴望使用更簡單的方式來生成您的博客? 你喜歡Python嗎? 也許你也萌生過編寫自己的靜態網站生成器的想法,但你認為要付出相當大的工作量? 如果你對這些問題的回答「是」,那麼這個項目就是為你準備的。

通過makesite.py,你可以完全控制。 沒有隱藏的魔法! 無需閱讀任何文檔即可了解其工作原理。 沒有必要學習如何編寫配置文件來產生一些預期的效果。

通過makesite.py:

  • 代碼即是文檔。

  • 代碼即是配置。

一切都按照簡單易懂的Python代碼進行布置,供您閱讀和增強。 它少於120行代碼(不包括注釋,文檔字元串和空白行)。 它讓你快速開始。 你只需要執行makesite.py。

您可以在幾分鐘內開發一個體面的網站/博客,然後您可以開始修改源代碼,布局和樣式表,以自定義您的網站的外觀和感覺,從而達到滿意的效果。

開始

本節提供了一些快速步驟,讓您儘快開始。

要在本地系統上進行快速演示,只需輸入以下命令:

靜態站點生成器:makesite.py

如果你沒有make,但有Python 3.x,輸入這個命令:

靜態站點生成器:makesite.py

注意:在某些環境中,您可能需要使用python而不是python3來調用Python 3.x.

如果您只有Python 2.7,請輸入以下命令:

靜態站點生成器:makesite.py

然後訪問http//localhost:8000/。 它應該看起來像這樣。

注意:您可以使用Python 2.7或Python 3.x運行makesite.py。

您可能會在前一個命令的輸出中看到一些Markdown的警告消息無法渲染。 這是由於這個項目中的一個示例博客有一些用Markdown編寫的帖子。 要正確渲染它們,請使用以下命令安裝commonmark軟體包:

靜態站點生成器:makesite.py

然後再次嘗試上一步。

對於一個面向互聯網的網站,您將靜態網站/博客放在某個託管服務和/或Web伺服器,如Apache HTTP伺服器,Nginx等。您可能只需要生成靜態文件,並知道這些靜態文件在哪裡,並將它們移動到您的託管位置。

如果您有make命令,請輸入以下命令以生成您的網站:

靜態站點生成器:makesite.py

如果你沒有make但是有python3,輸入這個命令:

靜態站點生成器:makesite.py

如果你只有python,輸入這個命令:

靜態站點生成器:makesite.py

_site目錄包含整個生成的網站。 該目錄的內容可以被複制到您的網站託管位置。

代碼

現在您已經知道如何生成此項目附帶的靜態網站,現在該查看makesite.py的功能了。 您可能並不需要閱讀整個部分。 源代碼非常明了,但以防萬一,您需要詳細了解它的功能,下面是詳細信息:

  1. main函數是網站生成的起點。 它調用了完成網站生成所需的其他功能。

  2. 首先它從頭開始創建一個全新的_site目錄。 靜態目錄中的所有文件都將複製到此目錄中。 稍後將生成靜態網站並寫入此目錄。

  3. 然後它創建一個帶有一些默認參數的params字典。這個字典被傳遞給其他功能。其他函數將從此字典中選擇值以填充布局模板文件中的佔位符。

    例如,讓我們以副標題參數為例。它被設置為我們的示例網站的虛擬品牌名稱:「Lorem Ipsum」。我們希望每個頁面在標題中包含此品牌名稱作為後綴。例如,關於頁面的標題中有「About - Lorem Ipsum」。現在查看用作靜態網站中所有頁面布局的頁面布局模板。此布局文件使用{{subtitle}}語法表示它是一個佔位符,應該在呈現模板時填充該佔位符。

    另一個值得注意的事情是,內容文件可以通過在內容標題中定義自己的參數來覆蓋這些參數。例如,查看主頁的內容文件。在其內容標題中,即具有鍵值對的頂部的HTML注釋中,它定義了一個名為title的新參數並且覆蓋了副標題參數。

    稍後我們將討論佔位符和內容標題的語法。這很簡單。

  4. 然後載入所有布局模板。 這個項目中有6個。

    layout/page.html:它包含適用於所有頁面的基本模板。 它以<!DOCTYPE html>和<html>開頭,並以</html>結尾。 此模板中的{{content}}佔位符將替換為頁面的實際內容。 例如,對於關於頁面,將{{content}}佔位符替換為content/about.html中的全部內容。 這是通過在代碼中進一步調用make_pages完成的。

    layout/post.html:它包含博客文章的模板。 請注意,它不以<!DOCTYPE html>開頭,也不包含<html>和</ html>標籤。 這不是一個完整的獨立模板。 該模板僅定義博客帖子特定的一小部分博客帖子頁面。 它包含HTML代碼和佔位符,用於顯示博客文章的標題,發布日期和作者。

    此模板必須與頁面布局模板組合才能創建最終的獨立模板。 為此,我們用頁面布局模板中的HTML代碼替換頁面布局模板中的{{content}}佔位符以獲取最終的獨立模板。 這是通過在代碼中進一步調用render來完成的。

    生成的獨立模板仍然包含帖子布局模板中的{{content}}佔位符。 然後將此{{content}}佔位符替換為博客文章中的實際內容。

    layout/list.html:它包含博客列表頁面的模板,該頁面按反向時間順序列出博客中的所有帖子。 除了在頂部提供一個標題和在底部提供一個RSS鏈接之外,這個模板並沒有太多的作用。 {{content}}佔位符以反向時間順序填充博客帖子列表。

    就像帖子版面模板一樣,該模板必須與頁面布局模板結合才能到達最終的獨立模板。

    layout/item.html:它包含博客列表頁面中每個博客文章項目的模板。 make_list函數使用此模板呈現每個博客文章項目,並將它們插入到列表布局模板中以創建博客列表頁面。

    layout/feed.xml:它包含RSS源的XML模板。 {{content}}佔位符填充了訂閱項目列表。

    layout/item.xml:它包含每個要收入到RSS源中的博客文章項目的XML模板。 make_list函數使用此模板呈現每個博客文章項目,並將它們插入到layout/feed.xml模板中以創建完整的RSS源。

  5. 載入完所有布局模板後,它會調用render以將帖子布局模板與頁面布局模板組合起來,以形成最終的獨立帖子模板。

    同樣,它將列表布局模板模板與頁面布局模板組合在一起以形成最終列表模板。

  6. 然後它會兩次調用make_pages來呈現主頁和其他幾個網站頁面:聯繫頁面和關於頁面。

  7. 然後,它再兩次調用make_pages來呈現兩個博客:一個名為blog,另一個名為news。

    請注意,make_pages調用接受三個位置參數:

    作為glob模式提供的內容源文件的路徑。

    將路徑模板輸出為字元串。

    布局模板代碼作為一個字元串。

  8. 這三個位置參數之後是關鍵字參數。 這些關鍵字參數用作輸出路徑模板和布局模板中的模板參數,以便用佔位符的相應值替換佔位符。

    如上面第2點所述,內容文件可以在其內容頭中覆蓋這些參數。

  9. 然後,它會兩次調用make_list來呈現兩個博客的博客列表頁面。 這些調用與make_pages調用非常相似。 make_list調用只有兩點不同:

    再次閱讀由make_pages讀取的相同博客帖子是沒有意義的,因此我們不會將路徑傳遞給內容源文件,而是將make_pages返回的博客帖子按時間順序排序的反向排序索引提供給make_list。

    還有一個額外的參數可以將項目布局模板作為字元串傳遞。

  10. 最後,它再兩次調用make_list來為這兩個博客生成RSS源。 除了我們在這裡使用源XML模板來生成RSS源之外,這些調用與以前的調用沒有什麼不同。

    快速回顧一下,我們創建一個_site目錄來編寫生成的靜態網站,定義一些默認參數,載入所有布局模板,然後調用make_pages來渲染帶有這些模板的頁面和博客帖子,調用make_list來呈現博客列表頁面和RSS源。 就這樣!

    看看make_pages和make_list函數是如何實現的。 它們非常簡單,每個函數代碼少於20行。 一旦你熟悉這段代碼,你可以開始修改它來添加更多的博客或減少它們。 例如,您可能不需要新聞博客,因此您可以刪除「新聞」的make_pages和make_list調用及其content/news處的內容。

布局

在這個項目中,布局模板文件位於布局目錄中。 但他們不一定要在那裡。 您可以將布局文件放在任何地方並相應地更新makesite.py。

本項目附帶的makesite.py的源代碼理解布局模板中佔位符的概念。 模板佔位符具有以下語法:

靜態站點生成器:makesite.py

圍繞<key>的{{之前,}}之後的任何空白都會被忽略。 <key>應該是一個有效的Python標識符。 以下是模板佔位符的示例:

靜態站點生成器:makesite.py

這是在makesite.py中已經實現的一個非常簡單的模板機制。 對於簡單的網站或博客,這應該足夠了。 如果您需要更複雜的模板引擎(如Jinja2或Cheetah),則需要修改makesite.py以添加對它的支持。

內容

在這個項目中,內容文件位於內容目錄中。 大多數內容文件都是用HTML編寫的。 但是,博客博客的內容文件是用Markdown編寫的。

makesite.py支持內容文件中標題的概念。 每個內容文件可以以包含標題的一個或多個連續HTML注釋開始。 每個頭文件都有以下語法:

靜態站點生成器:makesite.py

在<!-- ,<key>,:,<value>和 -->標記之前,之後和周圍的任何空白都將被忽略。 以下是一些示例標題:

靜態站點生成器:makesite.py

它會在每個內容文件的頂部查找標題。 只要遇到一些非標題文本,就不會檢查該標題的其餘內容。

答謝

致謝:

Susam的文檔和單元測試。

Keith Gaughan改進了模板的單次渲染。

許可

這是免費的開源軟體。 根據MIT許可證的條款,您可以使用,複製,修改,合併,發布,分發,再許可和/或出售其副本。

本軟體按「原樣」提供,不附有任何明示或暗示的擔保。 詳細信息請參見MIT許可證。

支持

要報告錯誤,提出改進建議或提出問題,請訪問https://github.com/sunainapai/makesite/issues。


英文原文:https://github.com/sunainapai/makesite
譯者:趙四妹

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python部落 的精彩文章:

GoPro Python API
使用pdb進行Python調試(下篇)

TAG:Python部落 |