Add computed fields#

Computed fields derive their value from other fields using Jinja2 expressions. They are never shown to the user as prompts; Cookieplone calculates their values automatically.

Define a computed field in cookieplone.json#

Set "format": "computed" on the field and write a Jinja2 expression as the default value:

{
  "version": "2.0",
  "properties": {
    "project_slug": {
      "type": "string",
      "title": "Project slug",
      "default": "my-project"
    },
    "package_name": {
      "type": "string",
      "format": "computed",
      "default": "{{ cookiecutter.project_slug | replace('-', '_') }}"
    }
  }
}

The field package_name is computed from project_slug after the user answers the prompt. It is available to template files and to other fields that reference it.

Reference other computed fields#

Computed fields can reference previously computed fields as long as they appear later in the properties object:

{
  "properties": {
    "project_slug": {
      "type": "string",
      "default": "my-project"
    },
    "package_name": {
      "type": "string",
      "format": "computed",
      "default": "{{ cookiecutter.project_slug | replace('-', '_') }}"
    },
    "module_path": {
      "type": "string",
      "format": "computed",
      "default": "src/{{ cookiecutter.package_name }}"
    }
  }
}

Use built-in filters in computed fields#

Cookieplone's built-in filters are available in Jinja2 expressions:

{
  "class_name": {
    "type": "string",
    "format": "computed",
    "default": "{{ cookiecutter.package_name | pascal_case }}"
  }
}

See Filters reference for the full list of available filters.

Constant fields#

Fields with "format": "constant" are similar to computed fields but are also hidden from prompts. Use them for values that are fixed regardless of user input:

{
  "schema_version": {
    "type": "string",
    "format": "constant",
    "default": "2.0"
  }
}