创建主题
Last updated
Last updated
为了生成 HTML 的输出, Pelican 使用 作为模版引擎。这是由于它的灵活性和简洁的语法。如果你希望创建自己的主题,可以从 主题中获取灵感。
为了使用你创建的主题来生成网站,聂可以使用 -t
标志来指定主题:
如果你不想每一次都这样指定主题,可以在设置中通过选项 THEME
设置默认主题。
为了生成你自己的主题,你必须遵循下面的结构:
static
文件夹包含了所有的静态文件,这些文件将会直接拷贝到输出的 theme
文件夹中。文件系统包括了 CSS 和 image 文件夹,但是这个只是一个例子。你可以随意的在这里安排文件内容。
templates
文件夹包含了所有的模版。这些模版将被用作渲染网站内容。上面列举的模版文件都是强制的。你可以添加自己的模版来更好的组织你的主题。
模版的核心的想法是在你的 HTML 页面中嵌入简单的语法。这个文档描述了那一个模版应当在主题中,那些变量将会传递给给模版。
所有的模版将会接收到你在设置文件中定义的变量。只要它们是全部大写的话,就可以直接获取。
下面这些设置将在所有的模版中导入。
变量
描述
output_file
被直接生成的文件名,比如当 Pelican 渲染主页的时候,这个变量的值为 "index.html"
articles
一个列表的文章,按照日期降序排列,所有的元素都是 Article
对象,因此你可以获取它们的属性(比如 title,summary, author 等)有时候这是隐藏的(比如 tag 页面)。你将会发现 all_articles
变量的信息
dates
与文章列表相同,按照日期排序,升序
drafts
草稿列表,其他和文章列表相同
tags
(tag, articles)元组的列表,包含了所有的标签
catefories
(category, articles) 元组的列表,包括你所有的分类和对应文章(值)
pages
pages 的列表
hidden_pages
隐藏 pages 的列表
dratf_pages
草稿页面的列表
URL 包装器(包括分类、标签和作者)都有用于比较的方法,因此能够非常简单的通过名称排序:
这是你博客中的主页,将会生成文件为 index.html
。
如果分页被激活了,那么子页面会被放置在 index{number}.html
中。
变量
描述
articles_paginator
一个文章列表的分页器对象
articles_page
当前页面中的文章
articles_previous_page
前一页的文章(如果不存在则是 None
)
articles_next_page
后一页的文章(如果不存在则是 None
)
dates_paginator
当前页面的文章的分页器对象,按照时间升序排序
dates_page
当前页面的文章,按照时间升序排序
dates_previous_page
前一个页面的文章,按照时间升序排序(如果不存在则是 None
)
dates_next_page
后一个页面的文章,按照时间升序排序(如果不存在则是 None
)
page_name
'index' 对于分页器链接非常有用
这个模版用来给每一个作者生成页面,通过设置中的 AUTHOR_SAVE_AS
确定输出位置(默认是 author/{slug}.html
)。如果分页被激活,子页面将会放置在 author/{slug}{number}.html
。
变量
描述
author
当前页面的作者名
articles
当前作者的文章
dates
当前作者的文章,按照时间升序
articles_paginator
一个文章列表的分页器对象
articles_page
当前页面中的文章
articles_previous_page
前一页的文章(如果不存在则是 None
)
articles_next_page
后一页的文章(如果不存在则是 None
)
dates_paginator
当前页面的文章的分页器对象,按照时间升序排序
dates_page
当前页面的文章,按照时间升序排序
dates_previous_page
前一个页面的文章,按照时间升序排序(如果不存在则是 None
)
dates_next_page
后一个页面的文章,按照时间升序排序(如果不存在则是 None
)
page_name
AUTHOR_URL ,在 {slug} 之后的都被移除了, 对于分页器链接非常有用
这个模版用来渲染所有的分类,输出的地址取决于 CATEGORY_SAVE_AS
设置(默认的是 category/{slug}.html
)。如果分页器被激活,子页面将会默认的放置于 category/{slug}{number}.html
。
变量
描述
category
当前的分类名
articles
当前分类的所有文章
dates
当前分类的文章,按照时间升序
articles_paginator
一个文章列表的分页器对象
articles_page
当前页面中的文章
articles_previous_page
前一页的文章(如果不存在则是 None
)
articles_next_page
后一页的文章(如果不存在则是 None
)
dates_paginator
当前页面的文章的分页器对象,按照时间升序排序
dates_page
当前页面的文章,按照时间升序排序
dates_previous_page
前一个页面的文章,按照时间升序排序(如果不存在则是 None
)
dates_next_page
后一个页面的文章,按照时间升序排序(如果不存在则是 None
)
page_name
CATEGORY_URL ,在 {slug} 之后的都被移除了, 对于分页器链接非常有用
当前模版用于渲染所有的文章,输出的位置取决于 ARTICLE_SAVE_AS
设置(默认是 {slug}.html
)。下面的变量在渲染时可用。
变量
描述
article
正在展示的文章对象
category
当前文章分类的名字
此外,任何你放置于文章开头的元数据都是作为 article
对象的属性,因此可以被取得。属性名字和元数据的名字相同。全部小写的除外。
举个例子,如果你想要在文章中添加一个叫做 FacebookImage
的元数据,像下面这样:
这个新的元数据将在渲染 article.html
模版时,作为 article.facebookimage
可以被使用。举个例子,这允许你特别的为每一个文章指明不同的 Facebook 打开链接标签的图片。
这个模版用于渲染每一个页面 (page)。输出位置取决于 PAGE_SAVE_AS
设置(默认是 pages/{slug}.html
)。下面的变量是可以使用的:
变量
描述
page
正在显示的 page 对象,你可以通过它传递 title,slug 以及 content
这个模版将会用于渲染所有的标签,输出的 html 的位置取决于 TAG_SAVE_AS
设置(默认是 tag/{slug}.html
)。当分页器被激活的时候,子序列页面将会默认放置在 tag/{slug}{number}.html
位置。
变量
描述
tag
当前的标签名
articles
当前标签的所有文章
dates
当前标签的文章,按照时间升序
articles_paginator
一个文章列表的分页器对象
articles_page
当前页面的文章
articles_previous_page
前一页的文章(如果不存在则是 None
)
articles_next_page
后一页的文章(如果不存在则是 None
)
dates_paginator
当前页面的文章的分页器对象,按照时间升序排序
dates_page
当前页面的文章,按照时间升序排序
dates_previous_page
前一个页面的文章,按照时间升序排序(如果不存在则是 None
)
dates_next_page
后一个页面的文章,按照时间升序排序(如果不存在则是 None
)
page_name
TAG_URL ,在 {slug} 之后的都被移除了, 对于分页器链接非常有用
这个模版用于渲染归档。当 YEAR_ARCHIVE_SAVE_AS
被定义时,渲染每一年的文章;当 MONTH_ARCHIVE_SAVE_AS
被定义时,渲染每个月的文章;当 DAY_ARCHIVE_SAVE_AS
被定义时,渲染每一天的文章。
变量
描述
period
一个 (year
, month
, day
) 元组,表明你当前的周期。其中 year
和 day
都是数字,而 month
是字符串。当按照给定年归档时候,只包含 year
;按照指定月归档的时候,包括了 year
和 month
;以此类推。
如果你想使用不同的标准排序, 有更多的选项。
Pelican 可以通过你设置的本地环境(DATE_FORMATS
,DEFAULT_DATE_FORMAT
)来提供 locale_date
属性。在另一方面, date
属性将会是一个 对象。如果你需要自定义时间的格式,使得它与你设置中的不同,请使用 Jinja 的过滤器 strftime
。这个和 Python 格式一样,因此过滤器会正确的工作,根据你设置中的本地化相关的变量来正确的格式化日期:
你可以在 查看 period
是如何使用的。