Skip to main content

Add polymorphic field type to Lektor

Project description

Lektor Polymorphic Type

PyPI version PyPI Supported Python Versions GitHub license GitHub Actions (Tests)

This plugin adds a new polymorphic lektor field type, polymorphic. The determination of the actual type implementation of the field value is deferred until evaluation time.

A motivating use case is to support having a “body” field whose formatting can be switched between, e.g., markdown, and html (or some other formatted type, such as reStructuredText.)

Installation

Add lektor-polymorphic-type to your project from command line:

lektor plugins add lektor-polymorphic-type

See the Lektor plugin documentation for more information.

How It Works

If the field has a polymorphic_type option set, that value is evaluated and the result is interpreted as the name of the final type for the field.

If no polymorphic_type option is set for the field, then we look for a field on the current record whose name is name of the current field with “_type” appended.

Examples

Simple Example

Here is an example model file for a simple page, with a selectable body format:

# page.ini

[model]
name = Page
label = {{ this.title }}

[fields.title]
label = Title
type = string

[fields.body]
label = Body
type = polymorphic

[fields.body_type]
label = Body Type
type = select
choices = markdown, html, text
default = markdown

Here, the value of the body_type field on a particular page will determine whether the body field is interpreted as being markdown, html or text.

Contrived Example

Here is a contrived example showing the use of the polymorphic_type option:

# page.ini

[model]
name = Page
label = {{ this.title }}

[fields.title]
label = Title
type = string

[fields.body]
label = Body
type = polymorphic
polymorphic_type = 'html' if this.body.lstrip().startswith('<') else 'markdown'

In this case, the body field will be interpreted as raw HTML if the content of that field starts with a “<”, otherwise it will be interpreted as Markdown text.

Author

Jeff Dairiki dairiki@dairiki.org

Changelog

0.1 — 2021-02-05

No code changes.

Update development status classifier to "stable".

Test under python 3.9. Stop testing under 3.5.

0.1b1 — 2020-05-04

Initial release.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lektor-polymorphic-type-0.1.tar.gz (8.9 kB view hashes)

Uploaded Source

Built Distribution

lektor_polymorphic_type-0.1-py2.py3-none-any.whl (4.6 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page