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] = []
-
field link: Path | None = None
-
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] = []
-
field link: Path | None = None
-
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 link: Path | 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.