我們很高興地宣布推出Cactus 3。 (Google 網站)的支援等等。大部分程式碼已重寫,並附有廣泛的單元測試套件。非常感謝 Thomas Orozco 和其他貢獻者。
Cactus 是一個簡單但功能強大的靜態網站產生器,使用 Python 和 Django 模板系統。 Cactus 還可以輕鬆進行本地開發並將網站直接部署到 S3。它非常適合公司、投資組合、個人、支援網站和部落格。
要快速了解,請觀看這個簡短的影片教學。
Cactus 的理念是,當今網站上的大多數動態功能都可以使用 Javascript 來完成,而實際網站可以保持靜態。靜態網站易於託管並且通常速度非常快。
我開發 Cactus 是因為我想要一個標準、簡單的系統,Sofa 的設計人員可以使用它來建立和部署快速網站。因此,典型的用戶是精通技術的設計師,想要使用模板,但不喜歡亂七八糟地設定 django 或 S3。
從那時起,它已經發展了相當大的一個插件系統,支援部落格、精靈、版本控制並且是可擴展的。
您可以在此黑客新聞討論中找到有關靜態站點生成器的更多討論。
還包括一個範例部落格專案。
使用以下襯墊安裝 Cactus
sudo easy_install cactus
如果沒有看到錯誤,現在可以產生一個新項目
cactus create ~/www.mysite.com
若要開始編輯和預覽您的網站,請輸入以下內容。然後將瀏覽器指向 localhost:8000 並開始編輯。 Cactus 將自動重建您的專案並根據變更刷新您的瀏覽器。
cd ~/www.mysite.com
cactus serve
準備好將網站部署到 S3 後,您可以執行以下命令。您將需要您的亞馬遜存取金鑰。如果您還沒有,請在此處閱讀如何取得。
cactus deploy
瞧。您的網站由 Cactus 產生並託管在 S3 上!
您可以透過產生這樣的新專案結構來建立新專案。確保目標資料夾尚不存在。
cactus create [path]
如果您沒有看到任何錯誤,那麼您指向的路徑現在應該如下所示。
- .build Generated site (upload this to your host)
- pages Your actual site pages
- index.html
- sitemap.xml
- robots.txt
- error.html A default 404 page
- templates Holds your django templates
- base.html
- static Directory with static assets
- images
- css
- js
- plugins A list of plugins. To enable remove disabled from the name
生成網站後,您可以透過向內容添加頁面來開始構建,這可以依賴於模板。例如,如果您想要一個頁面/articles/2010/my-article.html
您將在頁面資料夾中建立包含目錄的檔案。然後你可以編輯該檔案並使用django的模板功能。
當您建立網站時,它將在建置資料夾中產生靜態版本,您可以將其上傳到任何主機。基本上,它會渲染頁面資料夾中的每個頁面,將其複製到建置資料夾並向其中添加所有靜態資源,使其成為獨立的網站。您可以像這樣建立您的網站:
cd [your-cactus-path]
cactus build
您渲染的網站現在可以在(隱藏)[path]/.build 資料夾中找到。 Cactus 還可以運行一個小型網頁伺服器來預覽您的網站並在您進行任何更改時更新它。這在開發以獲得即時視覺回饋時非常方便。
你可以像這樣運行它:
cactus serve
Cactus 透過使用範本標籤 {% static %} 和 {% url %} 可以輕鬆地相對連結到專案內的頁面和靜態資源。例如,如果您位於/blog/2011/Jan/my-article.html
頁面並且想要連結到/contact.html
您可以編寫以下內容:
<a href="{% url '/contact.html' %}">Contact</a>
只需使用您通常使用的 URL:不要忘記前導斜線。
Cactus 使用 Django 模板。它們應該與其他模板系統非常相似,並且具有一些很好的功能,例如繼承。簡而言之:變數看起來像這樣{{ name }}
,標籤像這樣{% block title %}Welcome{% endblock %}
。您可以在 django 網站閱讀完整文件。
若要為您的網站啟用插件,請將檔案名稱從 [PLUGIN].disabled.py 變更為 [PLUGIN].py。
Cactus 可以將您的網站直接部署到 S3,您只需要您的 Amazon 憑證和儲存桶名稱。 Cactus 會在設定檔 config.json 中記住這些內容,以便未來的部署變得輕鬆。密鑰安全地儲存在鑰匙圈或其他作業系統上的類似服務中。
cactus deploy
部署完成後即可直接存取網站。 Cactus 還確保所有文字檔案都被壓縮並添加快取標頭。
有關如何在 Cactus 之上建立部落格的完整範例,請參閱 CactusBlog。
部落格外掛程式從元資料中取得貼文標題、作者和日期。例如:
title: My first post
author: Koen Bok
date: 22-07-2012
{% extends "post.html" %}
{% block body %}
{% endblock %}
修改config.json
以設定自訂部落格路徑、預設作者姓名或用於解析元資料的日期模式。預設值是:
"blog": {
"path": "blog",
"author": "Unknown",
"date-format": "%d-%m-%Y"
}
預設情況下,您可以聲明要包含在每個頁面上方的變量,例如:
test_text: Lorem Ipsum
<p>{{ test_text }}</p>
您可以使用 YAML 來宣告變數。只需用---
和...
文檔分隔符號包圍該區塊即可。然後物件和陣列將在模板內可用:
---
header_text: Lorem Ipsum
custom_object:
name: Lorem
description: Ipsum
custom_array:
-
name: lorem
-
name: ipsum
...
{% for item in custom_array %}
<p>{{ header_text }}: {{ item.name }}</p>
{% endfor %}
<p>{{ custom_object.name }} | {{ custom_object.description }}</p>
PyYAML函式庫用於此功能。
Cactus 為您的靜態文件提供了一個資產管道。如果您想使用它,請確保使用 {% static %} 範本標記連結到您的靜態資源:它們可能會在此過程中被重新命名。
修改config.json
,並加入您想要指紋辨識的擴充:
"fingerprint": [
"js",
"css"
],
這使您可以啟用具有長過期日期的快取。當文件更改時,其名稱將反映更改。非常適合使用 CDN 時。
修改config.json
,並加入您想要最佳化的擴充:
"optimize": [
"js",
"css"
],
預設情況下,Cactus 將使用:
查看專案中的plugins/static_optimizes.py
以了解其運作方式。添加您自己的優化器非常容易!
如果您希望網站地圖具有絕對路徑,則需要將 site-url 鍵新增至 config.json
您可以透過新增修改配置並新增以下內容來啟用此功能:
"site-url": "http://yoursite.com",
請注意,如果您希望網站地圖對 Google 網站管理員工具有效,則需要執行此操作。
如果您不想在 URL 中包含“.html”,Cactus 可以為您重寫這些內容,並透過建立“/my-”,讓“/my-page.html”看起來顯示為“/my-page/”頁/index.html”文件。
您可以透過新增修改配置並新增以下內容來啟用此功能:
"prettify": true
請注意,如果您要使用此功能,則絕對應該將「元規範」設定為您正在使用的 URL,以免影響您的搜尋排名:
<link rel="canonical" href="{{ CURRENT_PAGE.absolute_final_url }}" />
要設定託管區域並為您的網域產生正確的名稱伺服器記錄,請確保您的儲存桶是有效的域名,然後運行:
cactus domain:setup
Cactus 將傳回一組名稱伺服器,然後您可以透過註冊商輸入這些名稱伺服器。若要再次查看列表,請執行:
cactus domain:list
如果您的網域是「裸網域」(例如,沒有www),Cactus 將創建一個額外的儲存桶,將您網域的www 變體重新導向到您的裸網域(因此將www.cactus.com 重新導向到cactus .com)。以上所有內容目前僅限亞馬遜。
Cactus 會根據您的頁面自動產生robots.txt
和sitemap.xml
檔案。
例如,這將有助於機器人為 Google 和 Bing 等索引您的頁面。
Cactus 在 Python 2.6、2.7、3.4 和 3.5 上進行了測試。它也可能適用於 Python 3.3。