Multiple Data Sources¶
Data Files¶
Part details, indexed by a part number:
1WB0002:
description: "Rear Window"
2DR0013:
description: "Rear Door"
1DX0077:
description: "Hatchback Door"
Inventory counts:
1WB0002,1001
2DR0013,401
1DX0077,14
Using load()
in a Template¶
The load()
function visible in the template context can be used to
load static data sources.
.. -*- mode: rst -*-
{# The details about parts in inventory are kept in a separate data
file from the stock quantity. #}
{% set parts = load('part-details.yaml') %}
.. list-table:: What's in stock
:header-rows: 1
* - part-num
- quantity
- description
{% for item in data | sort %}
* - {{ item[0] }}
- {{ item[1] }}
- {{ parts[item[0]].description }}
{% endfor %}
load()
will attempt to guess the format for a data source based on
the name by looking at file extensions. To explicitly select a format,
pass the name in the data_format
argument.
{% set parts = load('part-details.dat', data_format='yaml') %}
The arguments given to the datatemplate
directive are also passed
to the loader used by load()
. To override those settings, or
provide different values for a different format, pass the arguments
directly to load()
.
{% set parts = load('part-details.dat', data_format='json', encoding='UTF-8') %}
Note
Database formats like dbm
are not supported, and should be used
as the primary data source for a datatemplate
directive.
Loading the Template¶
.. datatemplate:csv:: inventory.csv
:template: inventory.tmpl
Rendered Output¶
part-num |
quantity |
description |
---|---|---|
1DX0077 |
14 |
Hatchback Door |
1WB0002 |
1001 |
Rear Window |
2DR0013 |
401 |
Rear Door |