Skip to content

Variables

Supported with Zensical >= 0.0.40

How to define own variables is described in the chapter Zensical Documentation: Macros.

Own variables

The variables are defined in the module data/variables.py or the YAML file data/variables.yml.

  • Author: Manfred Rosenboom
  • Version: 1.0
  • Zensical: 0.1.0

Built-in template variables

  • Python: 3.15.2
  • System: Linux
  • System Version: 7.0.0-1019-azure
  • Now: 2026-11-06 10:03:31.471503

Git metadata

Git: {'status': True, 'date': datetime.datetime(2026, 11, 6, 11, 1, 56, tzinfo=datetime.timezone(datetime.timedelta(seconds=3600))), 'short_commit': '31209b0', 'commit': '31209b0abdeb86aa20b4ebb337973ba589bf5295', 'tag': '', 'short_tag': '', 'author': 'Manfred Rosenboom', 'author_email': 'maroph@pm.me', 'committer': 'Manfred Rosenboom', 'committer_email': 'maroph@pm.me', 'date_ISO': '2026-11-06T11:01:56+01:00', 'message': 'Upgrade to Zensical 0.1.0, extends build.bash', 'raw': 'commit 31209b0abdeb86aa20b4ebb337973ba589bf5295\nAuthor: Manfred Rosenboom maroph@pm.me\nDate: Fri Nov 6 11:01:56 2026 +0100\n\n Upgrade to Zensical 0.1.0, extends build.bash', 'root_dir': '/home/runner/work/zensical_sample/zensical_sample'}


Built-in template variable macros_info

Macros Plugin Environment

General List

All available variables and filters within the macros plugin:

Variable Type Content
author str 'Manfred Rosenboom'
config dict config_warnings = [], copyright = 'Copyright &copy 2025-2026 CC-BY 4.0 by Manfred Rosenboom
\nChange cookie settings\n', dev_addr = 'localhost:8000', docs_dir = 'docs', draft_docs = None, edit_uri = 'edit/main/docs', edit_uri_template = None, exclude_docs = '!.nojekyll\n!.well-known\n', extra = {'generator': True, 'social': [{'icon': 'fontawesome/brands/github', 'link': 'https://github.com/maroph', 'name': 'github.com/maroph'}, {'icon': 'fontawesome/brands/mastodon', 'link': 'https://mastodon.social/@maroph', 'name': 'mastodon.social/@maroph'}], 'consent': {'title': 'Cookie consent', 'description': " We use cookies to recognize your repeated visits and preferences, as well\n as to measure the effectiveness of our documentation and whether users\n find what they're searching for. With your consent, you're helping us to\n make our documentation better.\n", 'actions': ['accept', 'reject', 'manage']}, 'polyfills': []}, extra_css = ['assets/extra/css/extra.css'], extra_javascript = [], extra_templates = [], markdown_extensions = [, 'toc', 'tables', 'attr_list', 'pymdownx.emoji', 'pymdownx.highlight', 'pymdownx.inlinehilite', 'pymdownx.snippets', 'pymdownx.superfences', 'zensical.extensions.macros'], mdx_configs = {'toc': {'title': None}, 'tables': {}, 'attr_list': {}, 'pymdownx.emoji': {'emoji_index': , 'emoji_generator': }, 'pymdownx.highlight': {'anchor_linenums': 'true', 'line_spans': '__span', 'pygments_lang_class': 'true'}, 'pymdownx.inlinehilite': {}, 'pymdownx.snippets': {}, 'pymdownx.superfences': {'custom_fences': [{'name': 'bash', 'class': 'bash', 'validator': , 'format': }, {'name': 'console', 'class': 'console', 'validator': , 'format': }, {'name': 'md', 'class': 'md', 'validator': , 'format': }, {'name': 'markdown', 'class': 'markdown', 'validator': , 'format': }, {'name': 'py', 'class': 'py', 'validator': , 'format': }, {'name': 'python', 'class': 'python', 'validator': , 'format': }, {'name': 'pycon', 'class': 'pycon', 'validator': , 'format': }, {'name': 'pyodide', 'class': 'pyodide', 'validator': , 'format': }, {'name': 'sh', 'class': 'sh', 'validator': , 'format': }, {'name': 'tree', 'class': 'tree', 'validator': , 'format': }]}, 'zensical.extensions.macros': {'enabled': True, 'include_yaml': ['data/variables.yml'], 'on_undefined': 'strict', 'on_error_fail': True}}, mdx_configs_hash = 7915939333288663981, nav = [{'title': 'Home', 'url': 'index.md', 'canonicalrl': None,meta': None, 'children': [], 'isndex': ue, 'active': False}, {'title': 'Zensical', 'url': None, 'canonicalurl': None, 'meta': None, 'children': [{'title': 'Config', 'url': 'zensical/config.md', 'canonical_url': None, 'meta': None, 'children': [], 'is_index': False, 'active': False}, {'title': 'Get started', 'url': 'zensical/get_started.md', 'canonical_url': None, 'meta': None, 'children': [], 'is_index': False, 'active': False}, {'title': 'Markdown in 5min', 'url': 'zensical/markdown.md', 'canonical_url': None, 'meta': None, 'children': [], 'is_index': False, 'active': False}, {'title': 'Markdown Exec', 'url': 'zensical/exec.md', 'canonical_url': None, 'meta': None, 'children': [], 'is_index': False, 'active': False}, {'title': 'Variables', 'url': 'zensical/variables.md', 'canonical_url': None, 'meta': None, 'children': [], 'is_index': False, 'active': False}], 'is_index': False, 'active': False}, {'title': 'Blog', 'url': None, 'canonical_url': None, 'meta': None, 'children': [{'title': 'Blog', 'url': 'blog/index.md', 'canonical_url': None, 'meta': None, 'children': [], 'is_index': True, 'active': False}], 'is_index': False, 'active': False}, {'title': 'Info', 'url': None, 'canonical_url': None, 'meta': None, 'children': [{'title': 'About', 'url': 'info/about.md', 'canonical_url': None, 'meta': None, 'children': [], 'is_index': False, 'active': False}, {'title': 'License', 'url': 'info/license.md', 'canonical_url': None, 'meta': None, 'children': [], 'is_index': False, 'active': False}], 'is_index': False, 'active': False}], **not_in_nav** = None, **plugins** = {'macros': {'config': {'enabled': True, 'include_yaml': ['data/variables.yml'], 'on_undefined': 'strict', 'on_error_fail': True}}, 'markdown-exec': {'config': {}}, 'tags': {'config': []}, 'blogs': {'config': [{'name': 'blog', 'config': {'enabled': True, 'authors': True, 'blog_dir': 'blog', 'blog_toc': True, 'draft': False, 'draft_on_serve': Fale, 'draftf_future_dat: False, 'pagination': True, 'paginationer_page': 10,paginationrl_format':page/{page}', 'postate_forma: 'MMMM dd, yyyy H:mm', 'paginationf_singleage': False, 'postxcerpt':optional', 'postxcerpt_sepator': '', 'posteadtime': False,archive': True, 'archiveame': 'Ahive', 'archiveate_forma: 'yyyy', 'archiverl_date_rmat': 'yyyy', 'archiverl_fort': 'archive/{date}', 'archiveagination': Fse, 'archiveoc': ue, 'categories': False}}]}, 'rss': {'config': [{'name': 'rss', 'config': {'enabled': True, 'matchath': 'bloposts/., 'abstract_chars_unt': 160, 'abstractelimiter':', 'daterom_ma': {'asreation': 'da', 'as_update': 'git', 'datetime_format': '%Y-%m-%d %H:%M', 'default_time': '12:00', 'default_timezone': 'Europe/Berlin'}, 'feed_description': 'My Zensical Sample Blog', 'feeds_filenames': {'json_created': 'feed_created.json', 'json_updated': 'feed_updated.json', 'rss_created': 'feed_created.xml', 'rss_updated': 'feed_updated.xml'}, 'feed_title': 'Blog', 'feed_ttl': 1440, 'image': 'assets/128px-Feed-icon.svg.png', 'json_feed_enabled': False, 'length': 10, 'pretty_print': True, 'rss_feed_enabled': True, 'stylesheet': 'auto', 'use_git': True, 'categories': [], 'comments_path': None, 'url_parameters': [], 'use_material_blog': True}}]}, 'social': {'config': []}, 'privacy': {'config': [{'name': 'privacy', 'config': {'enabled': True, 'concurrency': 3, 'cache': True, 'cache_dir': '.cache/plugin/privacy', 'log': True, 'log_level': 'info', 'assets': True, 'assets_fetch': True, 'assets_fetch_dir': 'assets/external', 'assets_include': [], 'assets_exclude': [], 'assets_expr_map': {}, 'links': True, 'links_attr_map': {}, 'links_noopener': True}}]}, 'optimize': {'config': []}, 'llmstxt': {'config': {'enabled': False, 'autoclean': True, 'base_url': None, 'markdown_description': None, 'full_output': None, 'sections': []}}, 'search': {'config': {'enabled': True, 'separator': '[\s\-_,:!=\\\\"`/]+|\.(?!\d)'}}, 'meta': {'config': {'enabled': True, 'meta_file': '.meta.yml'}}, 'exclude': {'config': {'enabled': False, 'glob': [], 'regex': []}}, 'redirects': {'config': {'enabled': False, 'redirect_maps': {}}}, 'autoapi': {'config': {'enabled': False, 'autoapi_dir': '.', 'autoapi_file_patterns': ['.py', '.pyi'], 'autoapignore': [], utoapieep_files': Fse, 'autoapienerate_apiocs': True, 'autoapidd_nav_eny': True, 'autoapioot': 'aoapi', 'handler': 'python'}}, 'apiutonav':'config': {'enabled': False, 'modules': [], 'moduleptions': {}'exclude': [], 'navection_title': 'I Reference', 'apioot_uri''reference', 'navtem_prefi: '', 'excluderivate':rue, 'showull_naspace': False, 'onmplicit_namesceackag: 'warn'}}, 'minify': {'config': {'enabled': True, 'minifytml': True'minifys': False, 'minifyss': False, 'htmlminpts': {'reveommen': True, 'removempty_space': lse, 'remove_all_empty_space': False, 'reduce_empty_attributes': True, 'reduce_boolean_attributes': False, 'remove_optional_attribute_quotes': True, 'convert_charrefs': True, 'keep_pre': False, 'pre_tags': ['pre', 'textarea'], 'pre_attr': 'pre'}, 'minify_inline_js': False, 'minify_inline_css': False, 'cache_safe': False, 'js_files': [], 'css_files': []}}, 'literate_nav': {'config': {'enabled': False, 'nav_file': 'SUMMARY.md', 'implicit_index': False, 'tab_length': 4, 'markdown_extensions': [], 'mdx_configs': {}}}, 'awesome_nav': {'config': {'enabled': False, 'filename': '.nav.yml', 'logs': {'nav_override': None, 'root_title': None, 'root_hide': None, 'no_matches': None}}}, 'nav_weight': {'config': {'enabled': False, 'section_renamed': False, 'index_weight': -10, 'warning': True, 'reverse': False, 'headless_included': False, 'default_page_weight': 0}}, 'offline': {'config': {'enabled': False}}}, plugins_hash = 16467924340234153029, remote_branch = 'gh-pages', remote_name = 'origin', repo_name = 'maroph/zensical_sample', repo_url = 'https://github.com/maroph/zensical_sample', root_dir = '/home/runner/work/zensical_sample/zensical_sample', site_author = 'Manfred Rosenboom>', site_description = "My Zensical sample site, using the features I'm mainly interested in.\n", site_dir = 'site', site_name = 'Zensical Sample Site', site_url = 'https://maroph.github.io/zensical_sample/', strict = False, template_hash = 2923785779725867609, theme = {'font': False, 'favicon': 'assets/great_wave_off_kanagawa_circle_64x64.png', 'logo': 'assets/great_wave_off_kanagawa_circle_251x251.png', 'language': 'en', 'direction': 'ltr', 'features': ['announce.dismiss', 'content.action.edit', 'content.action.view', 'content.code.annotate', 'content.code.copy', 'content.code.select', 'content.footnote.tooltips', 'content.tabs.link', 'content.tooltips', 'header.autohide', 'navigation.expand', 'navigation.footer', 'navigation.indexes', 'navigation.instant', 'navigation.instant.prefetch', 'navigation.path', 'navigation.prune', 'navigation.sections', 'navigation.tabs', 'navigation.tabs.sticky', 'navigation.top', 'navigation.tracking', 'search.highlight', 'toc.follow'], 'palette': [{'scheme': 'default', 'media': '(prefers-color-scheme: light)', 'toggle': {'icon': 'lucide/sun', 'name': 'Switch to dark mode'}, 'primary': None, 'accent': None}, {'scheme': 'slate', 'media': '(prefers-color-scheme: dark)', 'toggle': {'icon': 'lucide/moon', 'name': 'Switch to light mode'}, 'primary': None, 'accent': None}], 'icon': {'repo': 'fontawesome/brands/github', 'edit': 'material/pencil', 'view': 'material/eye', 'previous': 'fontawesome/solid/angle-left', 'next': 'fontawesome/solid/angle-right', 'logo_explicit': False, 'annotation': None, 'tag': {}, 'blog': {'back': 'lucide/arrow-left', 'date': 'lucide/calendar-days', 'date_updated': 'lucide/calendar-clock', 'categories': 'lucide/library', 'readtime': 'lucide/clock'}, 'logo': 'lucide/book-open', 'top': 'lucide/circle-arrow-up', 'share': 'lucide/share-2', 'menu': 'lucide/menu', 'alternate': 'lucide/languages', 'search': 'lucide/search', 'close': 'lucide/x', 'admonition': {}}, 'custom_dir': None, 'font_explicit': True, 'name': None, 'variant': 'modern', 'static_templates': ['404.html', 'sitemap.xml']}, theme_dirs = ['/opt/hostedtoolcache/Python/3.15.2/x64/lib/python3.15/site-packages/zensical_ui/templates'], use_directory_urls = False, validation = {'unresolved_references': False, 'unresolved_footnotes': False, 'unused_definitions': False, 'unused_footnotes': False, 'shadowed_definitions': False, 'shadowed_footnotes': False, 'invalid_links': True, 'invalid_link_anchors': True, 'absolute_links_relative_to_docs': False}, watch = [], watched_files = [('/home/runner/work/zensical_sample/zensical_sample/data/variables.yml', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/.nojekyll', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/.well-known/security.txt', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/assets/128px-Feed-icon.svg.png', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/assets/cc-by_88x31.png', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/assets/extra/css/extra.css', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/assets/extra/css/jetbrains-mono-v18-latin_latin-ext-regular.woff2', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/assets/great_wave_off_kanagawa_circle_251x251.png', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/assets/great_wave_off_kanagawa_circle_64x64.png', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/blog/.authors.yml', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/blog/.meta.yml', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/blog/index.md', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/blog/posts/first_post.md', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/index.md', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/info/about.md', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/info/license.md', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/zensical/config.md', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/zensical/exec.md', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/zensical/get_started.md', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/zensical/markdown.md', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/zensical/variables.md', 1793959393)]
consent _MacroVariables actions = ['accept', 'reject', 'manage'], description = " We use cookies to recognize your repeated visits and preferences, as well\n as to measure the effectiveness of our documentation and whether users\n find what they're searching for. With your consent, you're helping us to\n make our documentation better.\n", title = 'Cookie consent'
context function (obj)
Display macros context (single object or all context).
cycler type (items)
Cycle through values by yield them one at a time, then restarting
dict type dict() -> new empty dictionary
environment dict jinja2_version = '3.1.6', macros_plugin_version = '1.3.7', mkdocs_version = '1.6.1', python_version = '3.15.2', system = 'Linux', system_version = '7.0.0-1019-azure'
extra dict consent = {'title': 'Cookie consent', 'description': " We use cookies to recognize your repeated visits and preferences, as well\n as to measure the effectiveness of our documentation and whether users\n find what they're searching for. With your consent, you're helping us to\n make our documentation better.\n", 'actions': ['accept', 'reject', 'manage']}, generator = True, polyfills = [], social = [{'icon': 'fontawesome/brands/github', 'link': 'https://github.com/maroph', 'name': 'github.com/maroph'}, {'icon': 'fontawesome/brands/mastodon', 'link': 'https://mastodon.social/@maroph', 'name': 'mastodon.social/@maroph'}]
files list []
filters dict add_indentation [function], convert_to_md_table [function], fix_url [function], pretty [function]
filters_builtin dict abs [builtin_function_or_method], attr [function], batch [function], capitalize [function], center [function], count [builtin_function_or_method], d [function], default [function], dictsort [function], e [function], escape [function], filesizeformat [function], first [function], float [function], forceescape [function], format [function], groupby [function], indent [function], int [function], items [function], join [function], last [function], length [builtin_function_or_method], list [function], lower [function], map [function], max [function], min [function], pprint [function], random [function], reject [function], rejectattr [function], replace [function], reverse [function], round [function], safe [function], select [function], selectattr [function], slice [function], sort [function], string [function], striptags [function], sum [function], title [function], tojson [function], trim [function], truncate [function], unique [function], upper [function], urlencode [function], urlize [function], wordcount [function], wordwrap [function], xmlattr [function]
generator bool True
git dict author = 'Manfred Rosenboom', author_email = 'maroph@pm.me', commit = '31209b0abdeb86aa20b4ebb337973ba589bf5295', committer = 'Manfred Rosenboom', committer_email = 'maroph@pm.me', date [datetime], date_ISO = '2026-11-06T11:01:56+01:00', message = 'Upgrade to Zensical 0.1.0, extends build.bash', raw = 'commit 31209b0abdeb86aa20b4ebb337973ba589bf5295\nAuthor: Manfred Rosenboom maroph@pm.me\nDate: Fri Nov 6 11:01:56 2026 +0100\n\n Upgrade to Zensical 0.1.0, extends build.bash', root_dir = '/home/runner/work/zensical_sample/zensical_sample', short_commit = '31209b0', short_tag = '', status = True, tag = ''
joiner type (sep)
A joining helper for templates.
lipsum function (n, html, min, max)
Generate some lorem ipsum for the template.
macros dict context [function], macros_info [function], now [function], pd_read_csv [function], pd_read_excel [function], pd_read_feather [function], pd_read_fwf [function], pd_read_json [function], pd_read_table [function], pd_read_yaml [function], read_csv [function], read_excel [function], read_feather [function], read_fwf [function], read_json [function], read_raw [function], read_table [function], read_yaml [function]
macros_info function Display info about the macros environment, for debugging purposes.
namespace type (args, kwargs)
A namespace object that can hold arbitrary attributes. It may be
navigation list []
now function Return current datetime (datetime.now()).
page Page
pd_read_csv function
pd_read_excel function
pd_read_feather function
pd_read_fwf function
pd_read_json function
pd_read_table function
pd_read_yaml function
plugin dict force_render_paths = '', include_dir = '', include_yaml = ['data/variables.yml'], j2_block_end_string = '%}', j2_block_start_string = '{%', j2_comment_end_string = '#}', j2_comment_start_string = '{#', j2_extensions = [], j2_variable_end_string = '}}', j2_variable_start_string = '{{', module_name = 'main', modules = [], on_error_fail = True, on_undefined = 'strict', render_by_default = True, verbose = False
polyfills _MacroList []
range type range(stop) -> range object
read_csv function (args, kwargs)
Read data using pandas and convert it to a Markdown table. Keyword arguments are split and passed to the relevant pandas reader as well as dataframes' to_markdown() method.
read_excel function (args, kwargs)
Read data using pandas and convert it to a Markdown table. Keyword arguments are split and passed to the relevant pandas reader as well as dataframes' to_markdown() method.
read_feather function (args, kwargs)
Read data using pandas and convert it to a Markdown table. Keyword arguments are split and passed to the relevant pandas reader as well as dataframes' to_markdown() method.
read_fwf function (args, kwargs)
Read data using pandas and convert it to a Markdown table. Keyword arguments are split and passed to the relevant pandas reader as well as dataframes' to_markdown() method.
read_json function (args, kwargs)
Read data using pandas and convert it to a Markdown table. Keyword arguments are split and passed to the relevant pandas reader as well as dataframes' to_markdown() method.
read_raw function
read_table function (args, kwargs)
Read data using pandas and convert it to a Markdown table. Keyword arguments are split and passed to the relevant pandas reader as well as dataframes' to_markdown() method.
read_yaml function (args, kwargs)
Read data using pandas and convert it to a Markdown table. Keyword arguments are split and passed to the relevant pandas reader as well as dataframes' to_markdown() method.
social _MacroList [{'icon': 'fontawesome/brands/github', 'link': 'https://github.com/maroph', 'name': 'github.com/maroph'}, {'icon': 'fontawesome/brands/mastodon', 'link': 'https://mastodon.social/@maroph', 'name': 'mastodon.social/@maroph'}]
version str '1.0'
zensical_version str '0.1.0'

Config Information

Standard configuration information. Do not try to modify.

e.g. {{ config.docs_dir }}

See also the MkDocs documentation on the config object.

Variable Type Content
config_warnings list []
copyright str 'Copyright &copy 2025-2026 CC-BY 4.0 by Manfred Rosenboom
\nChange cookie settings\n'
dev_addr str 'localhost:8000'
docs_dir str 'docs'
draft_docs NoneType None
edit_uri str 'edit/main/docs'
edit_uri_template NoneType None
exclude_docs str '!.nojekyll\n!.well-known\n'
extra dict consent = {'title': 'Cookie consent', 'description': " We use cookies to recognize your repeated visits and preferences, as well\n as to measure the effectiveness of our documentation and whether users\n find what they're searching for. With your consent, you're helping us to\n make our documentation better.\n", 'actions': ['accept', 'reject', 'manage']}, generator = True, polyfills = [], social = [{'icon': 'fontawesome/brands/github', 'link': 'https://github.com/maroph', 'name': 'github.com/maroph'}, {'icon': 'fontawesome/brands/mastodon', 'link': 'https://mastodon.social/@maroph', 'name': 'mastodon.social/@maroph'}]
extra_css list ['assets/extra/css/extra.css']
extra_javascript list []
extra_templates list []
markdown_extensions list [, 'toc', 'tables', 'attr_list', 'pymdownx.emoji', 'pymdownx.highlight', 'pymdownx.inlinehilite', 'pymdownx.snippets', 'pymdownx.superfences', 'zensical.extensions.macros']
mdx_configs dict attr_list = {}, pymdownx.emoji = {'emoji_index': , 'emoji_generator': }, pymdownx.highlight = {'anchor_linenums': 'true', 'line_spans': '__span', 'pygments_lang_class': 'true'}, pymdownx.inlinehilite = {}, pymdownx.snippets = {}, pymdownx.superfences = {'customences'[{'name': 'bash', 'class': 'bash', 'validator': , 'format': }, {'name': 'console', 'class': 'console', 'validator': , 'format': }, {'name': 'md', 'class': 'md', 'validator': , 'format': }, {'name': 'markdown', 'class': 'markdown', 'validator': , 'format': }, {'name': 'py', 'class': 'py', 'validator': , 'format': }, {'name': 'python', 'class': 'python', 'validator': , 'format': }, {'name': 'pycon', 'class': 'pycon', 'validator': , 'format': }, {'name': 'pyodide', 'class': 'pyodide', 'validator': , 'format': }, {'name': 'sh', 'class': 'sh', 'validator': , 'format': }, {'name': 'tree', 'class': 'tree', 'validator': , 'format': }]}, tabs = {}, **toc** = {'title':one}, zensical.extensions.macros =
mdx_configs_hash int 7915939333288663981
nav list [{'title': 'Home', 'url': 'index.md', 'canonical_url': None, 'meta': None, 'children': [], 'is_index': True, 'active': False}, {'title': 'Zensical', 'url': None, 'canonical_url': None, 'meta': None, 'children': [{'title': 'Config', 'url': 'zensical/config.md', 'canonical_url': None, 'meta': None, 'children': [], 'is_index': False, 'active': False}, {'title': 'Get started', 'url': 'zensical/get_started.md', 'canonical_url': None, 'meta': None, 'children': [], 'is_index': False, 'active': False}, {'title': 'Markdown in 5min', 'url': 'zensical/markdown.md', 'canonical_url': None, 'meta': None, 'children': [], 'is_index': False, 'active': False}, {'title': 'Markdown Exec', 'url': 'zensical/exec.md', 'canonical_url': None, 'meta': None, 'children': [], 'is_index': False, 'active': False}, {'title': 'Variables', 'url': 'zensical/variables.md', 'canonical_url': None, 'meta': None, 'children': [], 'is_index': False, 'active': False}], 'is_index': False, 'active': False}, {'title': 'Blog', 'url': None, 'canonical_url': None, 'meta': None, 'children': [{'title': 'Blog', 'url': 'blog/index.md', 'canonical_url': None, 'meta': None, 'children': [], 'is_index': True, 'active': False}], 'is_index': False, 'active': False}, {'title': 'Info', 'url': None, 'canonical_url': None, 'meta': None, 'children': [{'title': 'About', 'url': 'info/about.md', 'canonical_url': None, 'meta': None, 'children': [], 'is_index': False, 'active': False}, {'title': 'License', 'url': 'info/license.md', 'canonical_url': None, 'meta': None, 'children': [], 'is_index': False, 'active': False}], 'is_index': False, 'active': False}]
not_in_nav NoneType None
plugins dict api_autonav = {'config': {'enabled': False, 'modules': [], 'module_options': {}, 'exclude': [], 'nav_section_title': 'API Reference', 'api_root_uri': 'reference', 'nav_item_prefix': '', 'exclude_private': True, 'show_full_namespace': False, 'on_implicit_namespace_package': 'warn'}}, autoapi = {'config': {'enabled': False, 'autoapi_dir': '.', 'autoapi_file_patterns': ['.py', '.pyi'], 'autoapi_ignore': [], 'autoapi_keep_files': False, 'autoapi_generate_api_docs': True, 'autoapi_add_nav_entry': True, 'autoapi_root': 'autoapi', 'handler': 'python'}}, awesome_nav = {'config': {'enabled': False, 'filename': '.nav.yml', 'logs': {'nav_override': None, 'root_title': None, 'root_hide': None, 'no_matches': None}}}, blogs = {'config': [{'name': 'blog', 'config': {'enabled': True, 'authors': True, 'blog_dir': 'blog', 'blog_toc': True, 'draft': False, 'draft_on_serve': False, 'draft_if_future_date': False, 'pagination': True, 'pagination_per_page': 10, 'pagination_url_format': 'page/{page}', 'post_date_format': 'MMMM dd, yyyy H:mm', 'pagination_if_single_page': False, 'post_excerpt': 'optional', 'post_excerpt_separator': '', 'post_readtime': False, 'archive': True, 'archive_name': 'Archive', 'archive_date_format': 'yyyy', 'archive_url_date_format': 'yyyy', 'archive_url_format': 'archive/{date}', 'archive_pagination': False, 'archive_toc': True, 'categories': False}}]}, exclude = {'config': {'enabled': False, 'glob': [], 'regex': []}}, literate_nav = {'config': {'enabled': False, 'nav_file': 'SUMMARY.md', 'implicit_index': False, 'tab_length': 4, 'markdown_extensions': [], 'mdx_configs': {}}}, llmstxt = {'config': {'enabled': False, 'autoclean': True, 'base_url': None, 'markdown_description': None, 'full_output': None, 'sections': []}}, macros = {'config': {'enabled': True, 'include_yaml': ['data/variables.yml'], 'on_undefined': 'strict', 'on_error_fail': True}}, markdown-exec = {'config': {}}, meta = {'config': {'enabled': True, 'meta_file': '.meta.yml'}}, minify = {'config': {'enabled': True, 'minify_html': True, 'minify_js': False, 'minify_css': False, 'htmlmin_opts': {'remove_comments': True, 'remove_empty_space': False, 'remove_all_empty_space': False, 'reduce_empty_attributes': True, 'reduce_boolean_attributes': False, 'remove_optional_attribute_quotes': True, 'convert_charrefs': True, 'keep_pre': False, 'pre_tags': ['pre', 'textarea'], 'pre_attr': 'pre'}, 'minify_inline_js': False, 'minify_inline_css': False, 'cache_safe': False, 'js_files': [], 'css_files': []}}, nav_weight = {'config': {'enabled': False, 'section_renamed': False, 'index_weight': -10, 'warning': True, 'reverse': False, 'headless_included': False, 'default_page_weight': 0}}, offline = {'config': {'enabled': False}}, optimize = {'config': []}, privacy = {'config': [{'name': 'privacy', 'config': {'enabled': True, 'concurrency': 3, 'cache': True, 'cache_dir': '.cache/plugin/privacy', 'log': True, 'log_level': 'info', 'assets': True, 'assets_fetch': True, 'assets_fetch_dir': 'assets/external', 'assets_include': [], 'assets_exclude': [], 'assets_expr_map': {}, 'links': True, 'links_attr_map': {}, 'links_noopener': True}}]}, redirects = {'config': {'enabled': False, 'redirect_maps': {}}}, rss = {'config': [{'name': 'rss', 'config': {'enabled': True, 'match_path': 'blog/posts/.*', 'abstract_chars_count': 160, 'abstract_delimiter': '', 'date_from_meta': {'as_creation': 'date', 'as_update': 'git', 'datetime_format': '%Y-%m-%d %H:%M', 'default_time': '12:00', 'default_timezone': 'Europe/Berlin'}, 'feed_description': 'My Zensical Sample Blog', 'feeds_filenames': {'json_created': 'feed_created.json', 'json_updated': 'feed_updated.json', 'rss_created': 'feed_created.xml', 'rss_updated': 'feed_updated.xml'}, 'feed_title': 'Blog', 'feed_ttl': 1440, 'image': 'assets/128px-Feed-icon.svg.png', 'json_feed_enabled': False, 'length': 10, 'pretty_print': True, 'rss_feed_enabled': True, 'stylesheet': 'auto', 'use_git': True, 'categories': [], 'comments_path': None, 'url_parameters': [], 'use_material_blog': True}}]}, search = {'config': {'enabled': True, 'separator': '[\s\-_,:!=\\\\"`/]+|\.(?!\d)'}}, social = {'config': []}, tags =
plugins_hash int 16467924340234153029
remote_branch str 'gh-pages'
remote_name str 'origin'
repo_name str 'maroph/zensical_sample'
repo_url str 'https://github.com/maroph/zensical_sample'
root_dir str '/home/runner/work/zensical_sample/zensical_sample'
site_author str 'Manfred Rosenboom>'
site_description str "My Zensical sample site, using the features I'm mainly interested in.\n"
site_dir str 'site'
site_name str 'Zensical Sample Site'
site_url str 'https://maroph.github.io/zensical_sample/'
strict bool False
template_hash int 2923785779725867609
theme dict custom_dir = None, direction = 'ltr', favicon = 'assets/great_wave_off_kanagawa_circle_64x64.png', features = ['announce.dismiss', 'content.action.edit', 'content.action.view', 'content.code.annotate', 'content.code.copy', 'content.code.select', 'content.footnote.tooltips', 'content.tabs.link', 'content.tooltips', 'header.autohide', 'navigation.expand', 'navigation.footer', 'navigation.indexes', 'navigation.instant', 'navigation.instant.prefetch', 'navigation.path', 'navigation.prune', 'navigation.sections', 'navigation.tabs', 'navigation.tabs.sticky', 'navigation.top', 'navigation.tracking', 'search.highlight', 'toc.follow'], font = False, font_explicit = True, icon = {'repo': 'fontawesome/brands/github', 'edit': 'material/pencil', 'view': 'material/eye', 'previous': 'fontawesome/solid/angle-left', 'next': 'fontawesome/solid/angle-right', 'logo_explicit': False, 'annotation': None, 'tag': {}, 'blog': {'back': 'lucide/arrow-left', 'date': 'lucide/calendar-days', 'date_updated': 'lucide/calendar-clock', 'categories': 'lucide/library', 'readtime': 'lucide/clock'}, 'logo': 'lucide/book-open', 'top': 'lucide/circle-arrow-up', 'share': 'lucide/share-2', 'menu': 'lucide/menu', 'alternate': 'lucide/languages', 'search': 'lucide/search', 'close': 'lucide/x', 'admonition': {}}, language = 'en', logo = 'assets/great_wave_off_kanagawa_circle_251x251.png', name = None, palette = [{'scheme': 'default', 'media': '(prefers-color-scheme: light)', 'toggle': {'icon': 'lucide/sun', 'name': 'Switch to dark mode'}, 'primary': None, 'accent': None}, {'scheme': 'slate', 'media': '(prefers-color-scheme: dark)', 'toggle': {'icon': 'lucide/moon', 'name': 'Switch to light mode'}, 'primary': None, 'accent': None}], static_templates = ['404.html', 'sitemap.xml'], variant = 'modern'
theme_dirs list ['/opt/hostedtoolcache/Python/3.15.2/x64/lib/python3.15/site-packages/zensical_ui/templates']
use_directory_urls bool False
validation dict absolute_links_relative_to_docs = False, invalid_link_anchors = True, invalid_links = True, shadowed_definitions = False, shadowed_footnotes = False, unresolved_footnotes = False, unresolved_references = False, unused_definitions = False, unused_footnotes = False
watch list []
watched_files list [('/home/runner/work/zensical_sample/zensical_sample/data/variables.yml', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/.nojekyll', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/.well-known/security.txt', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/assets/128px-Feed-icon.svg.png', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/assets/cc-by_88x31.png', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/assets/extra/css/extra.css', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/assets/extra/css/jetbrains-mono-v18-latin_latin-ext-regular.woff2', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/assets/great_wave_off_kanagawa_circle_251x251.png', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/assets/great_wave_off_kanagawa_circle_64x64.png', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/blog/.authors.yml', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/blog/.meta.yml', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/blog/index.md', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/blog/posts/first_post.md', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/index.md', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/info/about.md', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/info/license.md', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/zensical/config.md', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/zensical/exec.md', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/zensical/get_started.md', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/zensical/markdown.md', 1793959393), ('/home/runner/work/zensical_sample/zensical_sample/docs/zensical/variables.md', 1793959393)]

Macros

These macros have been defined programmatically for this environment (module or pluglets).

Variable Type Content
context function (obj)
Display macros context (single object or all context).
macros_info function Display info about the macros environment, for debugging purposes.
now function Return current datetime (datetime.now()).
pd_read_csv function
pd_read_excel function
pd_read_feather function
pd_read_fwf function
pd_read_json function
pd_read_table function
pd_read_yaml function
read_csv function (args, kwargs)
Read data using pandas and convert it to a Markdown table. Keyword arguments are split and passed to the relevant pandas reader as well as dataframes' to_markdown() method.
read_excel function (args, kwargs)
Read data using pandas and convert it to a Markdown table. Keyword arguments are split and passed to the relevant pandas reader as well as dataframes' to_markdown() method.
read_feather function (args, kwargs)
Read data using pandas and convert it to a Markdown table. Keyword arguments are split and passed to the relevant pandas reader as well as dataframes' to_markdown() method.
read_fwf function (args, kwargs)
Read data using pandas and convert it to a Markdown table. Keyword arguments are split and passed to the relevant pandas reader as well as dataframes' to_markdown() method.
read_json function (args, kwargs)
Read data using pandas and convert it to a Markdown table. Keyword arguments are split and passed to the relevant pandas reader as well as dataframes' to_markdown() method.
read_raw function
read_table function (args, kwargs)
Read data using pandas and convert it to a Markdown table. Keyword arguments are split and passed to the relevant pandas reader as well as dataframes' to_markdown() method.
read_yaml function (args, kwargs)
Read data using pandas and convert it to a Markdown table. Keyword arguments are split and passed to the relevant pandas reader as well as dataframes' to_markdown() method.

Git Information

Information available on the last commit and the git repository containing the documentation project:

e.g. {{ git.message }}

Variable Type Content
author str 'Manfred Rosenboom'
author_email str 'maroph@pm.me'
commit str '31209b0abdeb86aa20b4ebb337973ba589bf5295'
committer str 'Manfred Rosenboom'
committer_email str 'maroph@pm.me'
date datetime datetime.datetime(2026, 11, 6, 11, 1, 56, tzinfo=datetime.timezone(datetime.timedelta(seconds=3600)))
date_ISO str '2026-11-06T11:01:56+01:00'
message str 'Upgrade to Zensical 0.1.0, extends build.bash'
raw str 'commit 31209b0abdeb86aa20b4ebb337973ba589bf5295\nAuthor: Manfred Rosenboom maroph@pm.me\nDate: Fri Nov 6 11:01:56 2026 +0100\n\n Upgrade to Zensical 0.1.0, extends build.bash'
root_dir str '/home/runner/work/zensical_sample/zensical_sample'
short_commit str '31209b0'
short_tag str ''
status bool True
tag str ''

Page Attributes

Provided by MkDocs. These attributes change for every page (the attributes shown are for this page).

e.g. {{ page.title }}

See also the MkDocs documentation on the page object.

Variable Type Content
meta dict
path str 'zensical/variables.md'
title str 'Variables'
url str 'zensical/variables.html'

To have all titles of all pages, use:

{% for page in navigation.pages %}
- {{ page.title }}
{% endfor %}

Plugin Filters

These filters are provided as a standard by the macros plugin.

Variable Type Content
add_indentation function (text, spaces, tabs)
Indent text using spaces or tabs.
convert_to_md_table function (df, kwargs)
Convert a pandas dataframe to a Markdown table.
fix_url function
pretty function

Builtin Jinja2 Filters

These filters are provided by Jinja2 as a standard.

See also the Jinja2 documentation on builtin filters.

Variable Type Content
abs builtin_function_or_method (number)
Return the absolute value of the argument.
attr function (environment, obj, name)
Get an attribute of an object. foo\|attr("bar") works like
batch function (value, linecount, fill_with)
A filter that batches items. It works pretty much like slice
capitalize function (s)
Capitalize a value. The first character will be uppercase, all others
center function (value, width)
Centers the value in a field of a given width.
count builtin_function_or_method (obj)
Return the number of items in a container.
d function (value, default_value, boolean)
If the value is undefined it will return the passed default value,
default function (value, default_value, boolean)
If the value is undefined it will return the passed default value,
dictsort function (value, case_sensitive, by, reverse)
Sort a dict and yield (key, value) pairs. Python dicts may not
e function (s)
Replace the characters &, <, >, ', and " in
escape function (s)
Replace the characters &, <, >, ', and " in
filesizeformat function (value, binary)
Format the value like a 'human-readable' file size (i.e. 13 kB,
first function (environment, seq)
Return the first item of a sequence.
float function (value, default)
Convert the value into a floating point number. If the
forceescape function (value)
Enforce HTML escaping. This will probably double escape variables.
format function (value, args, kwargs)
Apply the given values to a printf-style_ format string, like
groupby function (environment, value, attribute, default, case_sensitive)
Group a sequence of objects by an attribute using Python's
indent function (s, width, first, blank)
Return a copy of the string with each line indented by 4 spaces. The
int function (value, default, base)
Convert the value into an integer. If the
items function (value)
Return an iterator over the (key, value) items of a mapping.
join function (eval_ctx, value, d, attribute)
Return a string which is the concatenation of the strings in the
last function (environment, seq)
Return the last item of a sequence.
length builtin_function_or_method (obj)
Return the number of items in a container.
list function (value)
Convert the value into a list. If it was a string the returned list
lower function (s)
Convert a value to lowercase.
map function (context, value, args, kwargs)
Applies a filter on a sequence of objects or looks up an attribute.
max function (environment, value, case_sensitive, attribute)
Return the largest item from the sequence.
min function (environment, value, case_sensitive, attribute)
Return the smallest item from the sequence.
pprint function (value)
Pretty print a variable. Useful for debugging.
random function (context, seq)
Return a random item from the sequence.
reject function (context, value, args, kwargs)
Filters a sequence of objects by applying a test to each object,
rejectattr function (context, value, args, kwargs)
Filters a sequence of objects by applying a test to the specified
replace function (eval_ctx, s, old, new, count)
Return a copy of the value with all occurrences of a substring
reverse function (value)
Reverse the object or return an iterator that iterates over it the other
round function (value, precision, method)
Round the number to a given precision. The first
safe function (value)
Mark the value as safe which means that in an environment with automatic
select function (context, value, args, kwargs)
Filters a sequence of objects by applying a test to each object,
selectattr function (context, value, args, kwargs)
Filters a sequence of objects by applying a test to the specified
slice function (value, slices, fill_with)
Slice an iterator and return a list of lists containing
sort function (environment, value, reverse, case_sensitive, attribute)
Sort an iterable using Python's :func:sorted.
string function (s)
Convert an object to a string if it isn't already. This preserves
striptags function (value)
Strip SGML/XML tags and replace adjacent whitespace by one space.
sum function (environment, iterable, attribute, start)
Returns the sum of a sequence of numbers plus the value of parameter
title function (s)
Return a titlecased version of the value. I.e. words will start with
tojson function (eval_ctx, value, indent)
Serialize an object to a string of JSON, and mark it safe to
trim function (value, chars)
Strip leading and trailing characters, by default whitespace.
truncate function (env, s, length, killwords, end, leeway)
Return a truncated copy of the string. The length is specified
unique function (environment, value, case_sensitive, attribute)
Returns a list of unique items from the given iterable.
upper function (s)
Convert a value to uppercase.
urlencode function (value)
Quote data for use in a URL path or query using UTF-8.
urlize function (eval_ctx, value, trim_url_limit, nofollow, target, rel, extra_schemes)
Convert URLs in text into clickable links.
wordcount function (s)
Count the words in that string.
wordwrap function (environment, s, width, break_long_words, wrapstring, break_on_hyphens)
Wrap a string to the given width. Existing newlines are treated
xmlattr function (eval_ctx, d, autospace)
Create an SGML/XML attribute string based on the items in a dict.