主题¶
有一个由社区管理的存储库 Pelican Themes 供人们分享和使用。
请注意,虽然我们尽最大努力审查和合并主题投稿,但它们是由鹈鹕社区提交的,因此可能会有不同程度的支持和互操作性。
创建主题¶
为了生成HTML输出,Pelican使用 Jinja 模板引擎由于其灵活性和简单的语法。如果你想创造自己的主题,请随时从 "simple" theme .
要使用已创建(或手动下载然后修改)的主题生成站点,可以通过 -t
旗帜:
pelican content -s pelicanconf.py -t /projects/your-site/themes/your-theme
如果您不想在每次调用中指定主题,可以定义 THEME
在您的设置中指向您首选主题的位置。
结构¶
要制作自己的主题,必须遵循以下结构:
├── static
│ ├── css
│ └── images
└── templates
├── archives.html // to display archives
├── period_archives.html // to display time-period archives
├── article.html // processed for each article
├── author.html // processed for each author
├── authors.html // must list all the authors
├── categories.html // must list all the categories
├── category.html // processed for each category
├── index.html // the index (list all the articles)
├── page.html // processed for each page
├── tag.html // processed for each tag
└── tags.html // must list all the tags. Can be a tag cloud.
static 包含将复制到输出的所有静态资源 theme 文件夹。上面的文件系统布局包括CSS和image文件夹,但这些只是示例。把你需要的放在这里。
templates 包含将用于生成内容的所有模板。上面列出的模板文件是必需的;如果有助于您在创建主题时保持有序,您可以添加自己的模板。
模板和变量¶
这个想法是使用一个简单的语法,可以嵌入到HTML页面中。本文档描述主题中应该存在哪些模板,以及在生成时将哪些变量传递给每个模板。
所有模板都将接收设置文件中定义的变量,只要它们都是大写字母。您可以直接访问它们。
公共变量¶
所有这些设置将对所有模板可用。
变量 |
描述 |
---|---|
output_file |
当前正在生成的文件的名称。例如,当Pelican呈现主页时,输出_文件将是“索引.html". |
文章 |
按日期降序排列的文章列表。所有的元素都是 Article 对象,因此您可以访问它们的属性(例如,标题、摘要、作者等)。有时这是有阴影的(例如,在标签页面中)。然后,您将在 all_articles 变量。 |
日期 |
相同的文章列表,但按日期升序排列。 |
hidden_articles |
隐藏物品清单 |
草稿 |
条款草案一览表 |
作者 |
(author,articles)元组的列表,包含所有作者和相应的文章(值) |
类别 |
(category,articles)元组的列表,包含所有类别和相应的项目(值) |
标签 |
(tag,articles)元组的列表,包含所有标记和相应的项目(值) |
页 |
页面列表 |
hidden_pages |
隐藏页的列表 |
draft_pages |
草稿页列表 |
分选¶
URL包装器(目前是类别、标记和作者)有比较方法,可以方便地按名称排序:
{% for tag, articles in tags|sort %}
如果你想根据不同的标准排序, `Jinja's sort command`_ _有很多选择。
日期格式¶
Pelican根据您的设置和区域设置设置日期格式 (DATE_FORMATS
/ DEFAULT_DATE_FORMAT
) and provides a locale_date
attribute. On the other hand, the date
attribute will be a datetime 对象。如果您需要自定义不同于设置的日期格式,请使用Jinja过滤器 strftime
那是Pelican的。用法与Python相同 strftime 格式化,但过滤器将执行正确的操作,并根据设置中给定的区域设置设置日期格式:
{{ article.date|strftime('%d %B %Y') }}
index.html¶
这是您博客的主页或索引,生成于 index.html
.
如果分页处于活动状态,则后续页面将驻留在 index{{number}}.html
.
变量 |
描述 |
---|---|
articles_paginator |
物品列表的paginator对象 |
articles_page |
文章的当前页 |
articles_previous_page |
上一页文章 ( |
articles_next_page |
文章的下一页 ( |
dates_paginator |
文章列表的paginator对象,按日期排序,升序。 |
dates_page |
文章的当前页,按日期排序,升序。 |
dates_previous_page |
上一页文章,按日期排序,升序 ( |
dates_next_page |
文章的下一页,按日期排序,升序 ( |
page_name |
“index”--用于分页链接 |
category.html¶
将为每个现有类别处理此模板,并根据 CATEGORY_SAVE_AS
设置 (Default: category/{{slug}}.html
). 如果分页处于活动状态,则默认情况下后续页面将驻留在 category/{{slug}}{{number}}.html
.
变量 |
描述 |
---|---|
类别 |
正在处理的类别的名称 |
文章 |
此类别的文章 |
日期 |
此类别的文章,但按日期排序,升序 |
articles_paginator |
物品列表的paginator对象 |
articles_page |
文章的当前页 |
articles_previous_page |
上一页文章 ( |
articles_next_page |
文章的下一页 ( |
dates_paginator |
文章列表的paginator对象,按日期排序,升序 |
dates_page |
文章的当前页,按日期排序,升序 |
dates_previous_page |
上一页文章,按日期排序,升序 ( |
dates_next_page |
文章的下一页,按日期排序,升序 ( |
page_name |
类别URL {{slug}} 已删除--对于分页链接很有用 |
article.html¶
每个文章都将处理此模板,并根据 ARTICLE_SAVE_AS
设置 (Default: {{slug}}.html
). 渲染时可以使用以下变量。
变量 |
描述 |
---|---|
文章 |
要显示的项目对象 |
类别 |
当前项目的类别名称 |
放在项目源文件头中的任何元数据都将作为 article
对象。字段名将与元数据字段的名称相同,但所有小写字符除外。
例如,可以添加一个名为 FacebookImage 到项目元数据,如下所示:
Title: I love Python more than music
Date: 2013-11-06 10:06
Tags: personal, python
Category: Tech
Slug: python-je-l-aime-a-mourir
Author: Francis Cabrel
FacebookImage: http://franciscabrel.com/images/pythonlove.png
此新元数据将作为 article.facebookimage 在你 article.html 模板。例如,这将允许您为Facebook open graph标记指定一个图像,该图像将随每篇文章而更改:
<meta property="og:image" content="{{ article.facebookimage }}"/>
page.html¶
将为每个页面处理此模板,并根据 PAGE_SAVE_AS
设置 (Default: pages/{{slug}}.html
). 渲染时可以使用以下变量。
变量 |
描述 |
---|---|
第页 |
要显示的页面对象。您可以访问它的标题、slug和内容。 |
tag.html¶
将为每个标记处理此模板,并根据 TAG_SAVE_AS
设置 (Default: tag/{{slug}}.html
). 如果分页处于活动状态,则默认情况下后续页面将驻留在 tag/{{slug}}{{number}}.html
.
变量 |
描述 |
---|---|
标签 |
正在处理的标记的名称 |
文章 |
与此标签相关的文章 |
日期 |
与此标记相关的文章,但按日期排序,升序 |
articles_paginator |
物品列表的paginator对象 |
articles_page |
文章的当前页 |
articles_previous_page |
上一页文章 ( |
articles_next_page |
文章的下一页 ( |
dates_paginator |
文章列表的paginator对象,按日期排序,升序 |
dates_page |
文章的当前页,按日期排序,升序 |
dates_previous_page |
上一页文章,按日期排序,升序 ( |
dates_next_page |
文章的下一页,按日期排序,升序 ( |
page_name |
标记URL后的所有内容 {{slug}} 已删除--对于分页链接很有用 |
period_archives.html¶
此模板将为您每年的帖子处理,如果 YEAR_ARCHIVE_SAVE_AS
定义,每个月如果 MONTH_ARCHIVE_SAVE_AS
定义,并且每天如果 DAY_ARCHIVE_SAVE_AS
定义。
变量 |
描述 |
---|---|
时期 |
形式的元组 (year , month , day )指示当前时间段。 year 和 day 是数字,而 month 是一个字符串。此元组仅包含 year 如果时间段是一个给定的年份。它包含两个 year 和 month 如果时间段超过年和月等等。 |
period_num |
表单的元组 ( |
您可以看到如何使用 period in the "simple" theme period_archives.html template .
物体¶
详细说明模板中可用和有用的对象属性。并非所有属性都列在这里,这是在模板中被认为有用的属性选择。
文章¶
项目的字符串表示是 source_path 属性。
属性 |
描述 |
---|---|
作者 |
这个 Author 这篇文章的。 |
作者 |
列表 Authors 这篇文章的。 |
类别 |
这个 Category 这篇文章的。 |
内容 |
文章的呈现内容。 |
日期 |
表示项目日期的Datetime对象。 |
date_format |
默认日期格式或区域设置日期格式。 |
default_template |
默认模板名称。 |
in_default_lang |
布尔值,表示文章是否用默认语言编写。 |
朗 |
文章的语言。 |
locale_date |
日期格式由 date_format . |
元数据 |
项目标题元数据 dict . |
save_as |
保存文章页面的位置。 |
slug |
页面段塞。 |
source_path |
项目源文件的完整系统路径。 |
relative_source_path |
相对路径自 PATH 到文章源文件。 |
地位 |
文章状态,可以是“已发布”或“草稿”中的任何一个。 |
总结 |
呈现的内容摘要。 |
标签 |
名单 Tag 物体。 |
模板 |
用于渲染的模板名称。 |
标题 |
文章标题。 |
翻译 |
翻译列表 Article 物体。 |
网址 |
文章页面的URL。 |
页¶
页面的字符串表示是 source_path 属性。
属性 |
描述 |
---|---|
作者 |
这个 Author 本页的。 |
内容 |
页面的呈现内容。 |
日期 |
表示页面日期的Datetime对象。 |
date_format |
默认日期格式或区域设置日期格式。 |
default_template |
默认模板名称。 |
in_default_lang |
布尔值,表示文章是否用默认语言编写。 |
朗 |
文章的语言。 |
locale_date |
日期格式由 date_format . |
元数据 |
页眉元数据 dict . |
save_as |
保存页面的位置。 |
slug |
页面段塞。 |
source_path |
页面源文件的完整系统路径。 |
relative_source_path |
相对路径自 PATH 到页面源文件。 |
地位 |
页面状态,可以是“已发布”、“隐藏”或“草稿”中的任何一个。 |
总结 |
呈现的内容摘要。 |
标签 |
名单 Tag 物体。 |
模板 |
用于渲染的模板名称。 |
标题 |
页面的标题。 |
翻译 |
翻译列表 Article 物体。 |
网址 |
页面的URL。 |
喂养¶
feed变量在3.0中发生了变化。现在每个变量都显式地在名称中列出ATOM或RSS。ATOM仍然是默认值。旧的主题需要更新。以下是提要变量的完整列表:
FEED_ATOM
FEED_RSS
FEED_ALL_ATOM
FEED_ALL_RSS
CATEGORY_FEED_ATOM
CATEGORY_FEED_RSS
AUTHOR_FEED_ATOM
AUTHOR_FEED_RSS
TAG_FEED_ATOM
TAG_FEED_RSS
TRANSLATION_FEED_ATOM
TRANSLATION_FEED_RSS
遗传¶
从3.0版开始,Pelican支持从 simple
主题,以便可以重用 simple
主题模板在您自己的主题。
如果 templates/
主题的目录丢失,它将被来自 simple
主题。所以如果在 simple
主题适合你,你不必从头开始写一个新的模板。
也可以从中扩展模板 simple
在自己的主题中使用 {{% extends %}}
指令如下例所示:
{% extends "!simple/index.html" %} <!-- extends the ``index.html`` template from the ``simple`` theme -->
{% extends "index.html" %} <!-- "regular" extending -->
例子¶
有了这个系统,就可以用两个文件创建一个主题。
base.html¶
第一个文件是 templates/base.html
模板:
{% extends "!simple/base.html" %}
{% block head %}
{{ super() }}
<link rel="stylesheet" type="text/css" href="{{ SITEURL }}/theme/css/style.css" />
{% endblock %}
在第一行,我们扩展
base.html
模板来自simple
主题,所以我们不必重写整个文件。在第三行,我们打开
head
已在中定义的块simple
主题。在第四行,函数
super()
保留以前插入的内容head
块。在第五行,我们向页面附加一个样式表。
最后一行,我们关闭
head
块。
此文件将由所有其他模板扩展,因此样式表将从所有页面链接。
style.css¶
第二个文件是 static/css/style.css
CSS样式表:
body {
font-family : monospace ;
font-size : 100% ;
background-color : white ;
color : #111 ;
width : 80% ;
min-width : 400px ;
min-height : 200px ;
padding : 1em ;
margin : 5% 10% ;
border : thin solid gray ;
border-radius : 5px ;
display : block ;
}
a:link { color : blue ; text-decoration : none ; }
a:hover { color : blue ; text-decoration : underline ; }
a:visited { color : blue ; }
h1 a { color : inherit !important }
h2 a { color : inherit !important }
h3 a { color : inherit !important }
h4 a { color : inherit !important }
h5 a { color : inherit !important }
h6 a { color : inherit !important }
pre {
margin : 2em 1em 2em 4em ;
}
#menu li {
display : inline ;
}
#post-list {
margin-bottom : 1em ;
margin-top : 1em ;
}
下载¶
您可以下载这个示例主题 here
.