Content Reuse

Snippets, data files, and DRY patterns

1 min read 258 words

Write once, publish everywhere. Bengal provides multiple ways to avoid repeating yourself.

Reuse Strategies

flowchart LR subgraph "Single Source" A[Snippet] B[Data File] C[Shortcode] end subgraph "Multiple Outputs" D[Page 1] E[Page 2] F[Page 3] end A --> D A --> E B --> D B --> F C --> E C --> F

Quick Reference

Reusable Markdown fragments stored in_snippets/:

_snippets/
├── install/
│   ├── pip.md
│   └── uv.md
└── warnings/
    └── experimental.md

Include in any page:

```{include} _snippets/install/pip.md
```

Structured YAML/JSON indata/:

# data/team.yaml
- name: Jane Doe
  role: Lead Developer
  github: janedoe

Access in templates:

{% for member in site.data.team %}
  {{ member.name }} - {{ member.role }}
{% end %}

Query content dynamically:

{# All tutorials #}
{% let tutorials = site.pages
   |> where('type', 'tutorial') %}

{# Recent posts #}
{% let recent = site.pages
   |> sort_by('date', reverse=true)
   |> take(5) %}

When to Use What

Method Best For Example
Snippets Repeated prose blocks Installation instructions, warnings
Data Files Structured data Team members, product features
Filtering Dynamic lists Recent posts, related pages
Shortcodes Parameterized components Video embeds, API badges

Tip

Start with snippets for common content blocks. Graduate to data files when you need structured data, and filtering when you need dynamic queries.