Skip to content

Data Generators

As seen in Looping Data, it is possible to use data_lists as a basis for iterative content loops within a single template.

Data generators extend this idea further, to create multiple content flows from a single input data_list. The generated outputs can be templates, other data_lists or any other flow type.

Defining Generators

A generator minimally requires an input_data_list source and a generator flow type

example content_list

flow_type flow_name parameter_list
data_list module_list
generator module_home_gen input_data_list: module_list

Input Parameters

A full list of available parameters is listed below:

parameter description default
input_data_list Source data_list to loop over for generator (none)
output_flow_type Specify flow_type to save output as template
output_flow_subtype Specify flow_subtype to save output as generated
output_flow_name Specify flow_name to save template as. Can reference data from input data_list {{flow_name}}_{{@gen.id}}

Tip

Each row of the input data_list will be processed to generate an output flow. The @gen dynamic prefix can be used to refer to values from within the input list row.

Example

In this example we will use start with a list of modules, and use a generator to create individual templates to show content from the module

Input

module_list

id title description
module_1 Welcome Welcome to the course...
module_2 Let's get started In this unit we will...

module_home_gen

The generator provides a simple template to display the module title and text descriptions, and a button that will later be used for navigation

type name value
title @gen.title
text @gen.description
button Continue

Output

Each row of input data will be processed to produce an output template flow

module_home_gen_module_1

type name value
title Welcome
text Welcome to the course...
button Continue

module_home_gen_module_2

type name value
title Let's get started
text In this unit we will...
button Continue

We could further develop this example to include images, add actions for the button click, mark content as hidden or conditional on data etc.

Special Cases

Generate output with dynamic references
If the generated output includes dynamic references that need to be preserved then it may be necessary to double-wrap the reference in the generator.

For example, a generator is used to create data_pipe flows for further processing data. References to @row local processing must use {{@row}} to populate correctly.

operation args_list
append_columns task_child: {@gen.id}_{{@row.id}}_article_tasks;

Additional Info

Google Sheet Demo - Not currently available

Live Preview Demo - Not currently available

See details in original RFC Proposal Doc