Post

Post本质上是一个dict对象,因为主要的都是属性,没有特别的函数可供调用。它的最基础属性,默认从 BaseFile 中继承。

基本属性

属性名 说明
title 文档的名称
url 文章的URL地址,默认类似`/post/xxxx`,如果网站设置中设定无前缀,则会是`/xxxx`的形式
url_path 接近url,但是没有前缀,比如 `post.url` 为 `/post/xxxx` 的时候,对应的 url_path 为 `xxxx`
status 当前文章的状态,默认为`public`,可以自定义,由用户书写当前文章的Metadata中的`status`这个key决定
toc 当前文章的TOC内容(各层级标题的索引),HTML结构的源码,数据格式为`字符串`
tags 等同`post.metadata.tags`,视为文档的标签,类型为`list`
date 日志的发布时间,数据类型为 Date
content 已经(由Markdown)编译为HTML格式的内容, 数据类型为Text
raw_content 文章的原始内容(未编译)
position 用户自己声明的排序序号
cover 日志的封面,如果`metadata.cover`不存在,则默认提取文章内的第一张图片作为封面;如果都不存在,则是一个空值
metadata 用户对该文档声明的元数据,具体参考本页面的`Metadata`
visits 访问数 (PV)
text_length 字符长度, 但不同于 utf8 编码, 这是 unicode 编码的计数,一个中文字或者一个字母,都计数为 1
text_words 字数长度, 英文的单词计数为1, 中日韩文一个字计数为1 (误差率 2% 左右)

status 的特别说明

另外,status设置,也基于根目录规则优先级最高,比如site_foder/_draft,其中_draft这是一个根目录,同时又以_开始,则认为这个目录下的所有日志的status都为draft,同理类推,如果是_system目录,则是system这个status。

Metadata 的字段说明

调用 post.metadata.xxx 即可, 比如 post.metadata.title; 如果不在系统默认处理的字段外,比如 my_field,也是类同, post.metadata.my_field 即可。
Metadata是通过Markdown的的Meta声明获得,具体请参考Markdown Meta支持

注意: 这是Post非常重要的属性,一些扩展的可能性依赖于Metadata!

title

如果有定义title,则会覆盖写入至对应的{{post.title}}字段。
如果没有定义title,则会自动取文件名作为日志的标题; 如果文章中有、且仅有一个H1的一级标题,则会以之作为title。

date

日志的发布时间,如果没有声明,我们会按照以下的规则获取文章的发表时间:

  1. 2012-12-12 Title.txt这样的文件名,我们会取出前面符合日期规则的字符作为发表时间;
  2. 默认取文件的最后修改时间作为发表时间。

url

可以用来自定义日志的URL
它会写入到 {{post.url_path}} 这个字段中去。

status

默认为public,也是默认显示在网站中的日志类型。
它的value可以是任意值,但不能超过20个字符长。

toc

一篇日志如果使用多级标题(H1、H2、H3 .etc),那么'post.toc'这个属性则对应多级标题的索引,即Table of Contents。
单篇文章的toc配置信息, 优先级高于站点上的配置。
接受值: true/false

app

申明当前 Markdown 文档使用什么类型的 App 进行渲染,从而当其被访问的时候,会由指定的 App 进行渲染。
目前支持两种类型: markdown, page.

homepage

如果是网站根目录下的以index为名的 Markdown 文档,比如 index.md,那么如果设置 homepage 为的话,则访问网站首页的时候,以当前渲染的 Markdown 文档为页面内容。
接受值: true/false

raw_allowed / html_allowed

如果设置为 true 的时候,则网站直接访问 Markdown 的文件路径是存在的,进行内容返回(未设置的话,默认一般会触发404以保护原始的文档)。如果 html_allowed 设定了,则不会返回原始平文本,而是渲染后的 HTML。
接受值: true/false

as_template

是否作为模板。
如果可作为模板,那么通过URL 的 GET 方式传递的参数,会替换掉 Markdown 文档最终 HTML 内容中{{ key }}的内容。比如http://yourdomain.com/post/my.md?title=hello, 会将 {{ title }} 替换为 hello
此外,如果文档中的代码块声明的语言类型为code,那么在该代码块内可以直接调用模板语法。
接受值: true/false

nav

一般是一个 list 形式,每个 item 是title: url的形式。
根据不同场合用户不一,多数时候,是构建当前页面的导航栏。

nav:
        - title: url
        - title2: url2

position

这个字段,可以作为排序的依据,要配合d.get_data这类的函数使用,并声明sort='position'
除了在metada中对position进行支持之外,文档的原文件名也会为position提供支持,比如1.2 my article.txt或者1.3 my other tiltes, 分别获得的position为1.2 1.3,其中(空格符)用以分割position与正常的标题。

注意,position仅支持正序,即1.2会排在1.3之前。

slot1

特殊的扩展属性,全文搜索的时候,可以指定对这个字段进行搜索。

slot2

特殊的扩展属性,全文搜索的时候,可以指定以这个字段进行排序。