鹈鹕的生成器,允许使用通用实体代替默认页面和文章实体
pelican-entities的Python项目详细描述
一个新的Pelican生成器 替换默认的页面和文章生成器,允许定义 任意内容类型,aka,实体类型(例如:项目、事件)和 关联索引/直接模板。
类似于drupal中的节点。
用法
更新pelicanconf.py:
- 将entities添加到PLUGINS。
PLUGINS=['entities',...]
禁用默认页面和文章生成器:
PAGE_PATHS=[]ARTICLE_PATHS=[]DIRECT_TEMPLATES=[]PAGINATED_DIRECT_TEMPLATES=[]
指定要在站点中使用的实体类型及其设置:
ENTITY_TYPES={<type1_name>:{PATHS:[<type1_path1>,<type1_path2>,...],EXCLUDES:[...],<type1_name>_URL:"...",<type1_name>_SAVE_AS:"...",...},<type2_name>:{...}}
更新主题以使用新变量。
注意不兼容的插件(那些依赖于页面和 文章生成器信号或存在的变量定义 他们)。
设置
在实体类型级别定义的设置优先于全局设置 一个。
默认值的变化
- 每个实体类型的设置都定义为 输入ENTITY_TYPES字典。
- PAGE_PATHS和ARTICLE_PATHS替换为PATHS。
- PAGE_EXCLUDES和ARTICLE_EXCLUDES替换为EXCLUDES。
- PAGE_URL、ARTICLE_URL、PAGE_SAVE_AS和ARTICLE_SAVE_AS替换为 泛型<entity_name>_URL和<entity_name>_SAVE_AS。
- ARTICLE_ORDER_BY和PAGE_ORDER_BY被删除,取而代之的是SORTER。
新设置
- DEFAULT_TEMPLATE:生成页面时默认使用的模板 实体类型。
- MANDATORY_PROPERTIES:必须为 被视为有效的实体(默认情况下,仅为标题)。
- SORTER:以实体列表为参数并负责的函数 按需分类。默认值是调用 entities.attribute_list_sorter(["date"], reverse=True)
- ARCHIVE_TEMPLATE:用于存档页的模板。
- CATEGORY_TEMPLATE:用于类别页的模板。
- TAG_TEMPLATE:用于标记页的模板。
- AUTHOR_TEMPLATE:用于作者页的模板。
- SUBGENERATOR_CLASS:可以选择定义自定义子生成器类。这应该 或者是与^{tt29}匹配的可调用$ 接口或将动态导入的此类可调用的导入路径。
背景/主题
新的可用变量
- 全局:
- url:当前页的url。
- entity_type:与此页关联的实体的类型。
- entity_types:dict,所有声明的实体类型都是键,并且 生成器作为值。
- <entity_type_name>:对于每个声明的实体类型,都会向
上下文包含:
- entities:该实体类型的所有实体。
- translations:该实体类型的所有转换。
- tags:该实体类型的所有标记。
- categories:该实体类型的所有类别。
- authors:该实体类型的所有作者。
- drafts:该实体类型的所有草稿。
- drafts_translations:该实体类型的所有草稿翻译。
- 实体页面:
- entity:包含描述实体的对象(替换article 或者page)。
- 直接模板:
- direct:在呈现直接模板时,变量始终等于true。
- 标签、类别、作者页面:
- entities:替换articles。
- all_entitites:替换all_articles。
- 草稿页:
- entity:替换article。
- all_entities:替换all_articles。
- 分页页面(直接模板或标记、类别、作者页面):
- entities_paginator:替换articles_paginator。
- entities_page:替换articles_page。
- entities_previous_page:替换articles_previous_page。
- entities_next_page:替换articles_next_page。
删除变量
- 实体页面:
- category:访问t穿过entity.category。
- 直接模板:
- dates:如果要以相反的顺序迭代,请显式地执行。
示例配置
这是我在网站上使用的配置:
ENTITY_TYPES={"Page":{"PATHS":[""],"EXCLUDES":["blog","projects"],"PAGE_URL":"{slug}","PAGE_SAVE_AS":"{slug}/index.html","PATH_METADATA":r"(?P<slug>[^/]+)/.*","DIRECT_TEMPLATES":["search"],"SEARCH_SAVE_AS":"search/index.html"},"Article":{"PATHS":["blog"],"ARTICLE_URL":"blog/{category}/{slug}/","ARTICLE_SAVE_AS":"blog/{category}/{slug}/index.html","PATH_METADATA":r".*/(?P<category>[^/]+)/(?P<date>\d{4}/\d{2}/\d{2})/(?P<slug>[^/]+)/.*","DIRECT_TEMPLATES":["blog"],"PAGINATED_DIRECT_TEMPLATES":["blog"],"BLOG_SAVE_AS":"blog/index.html","CATEGORY_TEMPLATE":"blog_category","CATEGORY_URL":"blog/{slug}/","CATEGORY_SAVE_AS":os.path.join("blog","{slug}","index.html"),"FEED_ATOM":os.path.join("blog","feeds","atom.xml"),"CATEGORY_FEED_ATOM":os.path.join("blog","feeds","%s.atom.xml")},"Project":{"PATHS":["projects"],"SORTER":entities.attribute_list_sorter(["date","project_start"],reverse=True),"PROJECT_URL":"projects/{category}/{slug}/","PROJECT_SAVE_AS":"projects/{category}/{slug}/index.html","PATH_METADATA":r".*/(?P<category>[^/]+)/(?P<slug>[^/]+)/.*","DIRECT_TEMPLATES":["projects"],"PAGINATED_DIRECT_TEMPLATES":["projects"],"PROJECTS_SAVE_AS":"projects/index.html","CATEGORY_TEMPLATE":"project_category","CATEGORY_URL":'projects/{slug}/',"CATEGORY_SAVE_AS":os.path.join('projects','{slug}','index.html'),"FEED_ATOM":os.path.join("projects","feeds","atom.xml"),"CATEGORY_FEED_ATOM":os.path.join("projects","feeds","%s.atom.xml")}}
对于工作示例,请检查my site和my site’s source code。
延伸
可用信号
- entity_generator_init:初始化父生成器。这个 生成器负责为每个实体类型创建生成器。
- entity_generator_finalized:父级生成上下文结束 发电机。
- entity_writer_finalized:父生成器生成输出的结束。
- entity_subgenerator_*:特定实体生成器的信号 键入。这些信号与物品生成器使用的信号相同。