Post Types

Beemo uses Pydantic models to validate content metadata files.

Page and Post models are passed into Beemo templates, so template authors can use their attributes to display content.

For example, within a post template, you could use the following code to display the post’s title and content:

<h1>${post.title}</h1>
<div>${post.html}</div>

See Templates for more information on how to use these objects within templates.

class beemo.post_types.Page

Bases: PostType

field post_type: str = 'page'
field slug: str [Required]
field title: str [Required]
field description: str | None = None
field html: str [Required]
field text: str | None = None
field excerpt: str | None = None
field og_image: str | None = None
field template: str | None = None
field cover_image: str | None = None
field author: str | None = None
field images: list[Path] = []
class beemo.post_types.HomePage

Bases: Page

field post_type: str = 'page'
field slug: None = None
field title: str [Required]
field description: str | None = None
field html: str [Required]
field text: str | None = None
field excerpt: str | None = None
field og_image: str | None = None
field template: str | None = None
field cover_image: str | None = None
field author: str | None = None
field images: list[Path] = []
class beemo.post_types.Post

Bases: PostType

field slug: str [Required]
field published: datetime [Required]
field modified: datetime | None = None
field tags: list[str] = []
field post_type: str = 'post'
field modified_diff: bool = False
field html_atom_safe: str | None = None
field title: str [Required]
field description: str | None = None
field html: str [Required]
field text: str | None = None
field excerpt: str | None = None
field og_image: str | None = None
field template: str | None = None
field cover_image: str | None = None
field author: str | None = None
field images: list[Path] = []

Note

Note that these models allow extra fields to be included in the metadata files, which can be accessed within templates. For example, if a post’s metadata file includes a hero_image field, you could access it within a template using ${post.hero_image}. However, no processing can take place so they will remain as strings.

It is safe to use these extra fields within templates, as their values will return as None if they are not included in the metadata file.