Azure Citadel
  • Blogs

  • Azure Arc
    • Overview
    • Azure Arc-enabled Kubernetes
      • Prereqs
      • Background
      • Deploy Cluster
      • Connect to Arc
      • Enable GitOps
      • Deploy Application
      • Enable Azure AD
      • Enforce Policy
      • Enable Monitoring
      • Enable Azure Defender
      • Enable Data Services
      • Enable Application Delivery
    • Azure Arc-enabled Servers
      • Prereqs
      • Scenario
      • Hack Overview
      • Azure Landing Zone
      • Arc Pilot resource group
      • Azure Monitoring Agent
      • Additional policy assignments
      • Access your on prem VMs
      • Create onboarding scripts
      • Onboarding using scripts
      • Inventory
      • Monitoring
      • SSH
      • Windows Admin Center
      • Governance
      • Custom Script Extension
      • Key Vault Extension
      • Managed Identity
    • Useful Links
  • Azure CLI
    • Install
    • Get started
    • JMESPATH queries
    • Integrate with Bash
  • Azure Landing Zones
    • ALZ Accelerator
      • Prereqs
      • Elevate
      • Bootstrap
      • Demote
      • Components
    • Deploy an Azure Landing Zone
      • Create an initial ALZ config
      • Run through the CI/CD workflow
    • Example Library Configs
      • Azure Landing Zone library
      • Azure Landing Zone library with overrides
  • Azure Lighthouse
    • Minimal Lighthouse definition
    • Using service principals
    • Privileged Identity Management
  • Azure Policy
    • Azure Policy Basics
      • Policy Basics in the Azure Portal
      • Creating Policy via the CLI
      • Deploy If Not Exists
      • Management Groups and Initiatives
    • Creating Custom Policies
      • Customer scenario
      • Policy Aliases
      • Determine the logic
      • Create the custom policy
      • Define, assign and test
  • Marketplace
    • Introduction
      • Terminology
      • Offer Types
    • Partner Center
    • Offer Type
    • Publish a VM Offer HOL
      • Getting Started
      • Create VM Image
      • Test VM Image
      • VM Offer with SIG
      • VM Offer with SAS
      • Publish Offer
      • Other VM Resources
    • Publish a Solution Template HOL
      • Getting Started
      • Create ARM Template
      • Validate ARM Template
      • Create UI Definition
      • Package Assets
      • Publish Offer
    • Publish a Managed App HOL
      • Getting Started
      • Create ARM Template
      • Validate ARM Template
      • Create UI Definition
      • Package Assets
      • Publish Offer
    • Managed Apps with AKS HOL
    • Other Managed App Resources
    • SaaS Offer HOLs
    • SaaS Offer Video Series
      • Video 1 - SaaS Offer Overview
      • Video 2 - Purchasing a SaaS Offer
      • Video 3 - Purchasing a Private SaaS Plan
      • Video 4 - Publishing a SaaS Offer
      • Video 5 - Publishing a Private SaaS Plan
      • Video 6 - SaaS Offer Technical Overview
      • Video 7 - Azure AD Application Registrations
      • Video 8 - Using the SaaS Offer REST Fulfillment API
      • Video 9 - The SaaS Client Library for .NET
      • Video 10 - Building a Simple SaaS Landing Page in .NET
      • Video 11 - Building a Simple SaaS Publisher Portal in .NET
      • Video 12 - SaaS Webhook Overview
      • Video 13 - Implementing a Simple SaaS Webhook in .NET
      • Video 14 - Securing a Simple SaaS Webhook in .NET
      • Video 15 - SaaS Metered Billing Overview
      • Video 16 - The SaaS Metered Billing API with REST
  • Microsoft Fabric
    • Theory
    • Prereqs
    • Fabric Capacity
    • Set up a Remote State
    • Create a repo from a GitHub template
    • Configure an app reg for development
    • Initial Terraform workflow
    • Expanding your config
    • Configure a workload identity
    • GitHub Actions for Microsoft Fabric
    • GitLab pipeline for Microsoft Fabric
  • Packer & Ansible
    • Packer
    • Ansible
    • Dynamic Inventories
    • Playbooks & Roles
    • Custom Roles
    • Shared Image Gallery
  • Partner Admin Link
    • Understanding PAL
    • User IDs & PAL
    • Service principals & PAL
    • CI/CD pipelines & PAL
    • Creating a dedicated PAL service principal
    • Azure Lighthouse & PAL
    • PAL FAQ
  • REST API
    • REST API theory
    • Using az rest
  • Setup
  • Sovereign Landing Zones
    • ALZ Accelerator
      • Prereqs
      • Elevate
      • Bootstrap
      • Demote
      • Components
    • Deploy Sovereign Landing Zone
      • Create an initial SLZ config
      • Run through the CI/CD workflow
      • Sovereign Landing Zone
    • Example Library Configs
      • Sovereign Landing Zone
      • Sovereign Landing Zone library with overrides
  • Terraform
    • Fundamentals
      • Initialise
      • Format
      • Validate
      • Plan
      • Apply
      • Adding resources
      • Locals and outputs
      • Managing state
      • Importing resources
      • Destroy
    • Get set up for Terraform
      • Cloud Shell
      • macOS
      • Windows with PowerShell
      • Windows with Ubuntu in WSL2
    • Using AzAPI
      • Using the REST API
      • azapi_resource
      • Removing azapi_resource
      • azapi_update_resource
      • Data sources and outputs
      • Removing azapi_update_resource
  • Virtual Machines
    • Azure Bastion with native tools & AAD
    • Managed Identities

  • About
  • Archive
  1. Home
  2. About
  3. Contributing
  4. Page Templates

Table of Contents

  • Available Templates
    • Default Templates
    • Explicit Layout Options
  • Template Reference
    • single Layout
    • series Layout
    • Workshop Series
    • Series with Content Control
    • Creating Custom Templates
    • Template Hierarchy
  • Best Practices
  • Shortcodes vs Templates

Page Templates

Understanding Hugo page templates and layouts available in the Azure Citadel theme

Table of Contents

  • Available Templates
    • Default Templates
    • Explicit Layout Options
  • Template Reference
    • single Layout
    • series Layout
    • Workshop Series
    • Series with Content Control
    • Creating Custom Templates
    • Template Hierarchy
  • Best Practices
  • Shortcodes vs Templates

Page Templates

The Azure Citadel Hugo theme provides several page templates (layouts) to control how your content is rendered. Understanding these templates helps you choose the right presentation for your content.

Available Templates

Default Templates

If you don’t specify a layout: in your front matter, Hugo automatically chooses:

  • Index pages (_index.md files) → Uses list.html
  • Regular pages → Uses single.html

Explicit Layout Options

You can override the default behavior by specifying a layout in your front matter:

---
title: "My Page"
layout: series
---

Template Reference

single Layout

Purpose: Individual content pages Usage: layout: single Features:

  • Clean, focused layout for article content
  • Table of contents in right sidebar (if headings present)
  • Contribution section at bottom
  • No child page listing

Best for: Documentation pages, articles, tutorials

series Layout

Purpose: Multi-part content with sequential navigation Usage: layout: series Features:

  • Right sidebar with series progress indicator
  • Visual progress bar showing completion status
  • Previous/Next navigation between series pages
  • Auto-generated listing of child pages
  • Series-aware table of contents
  • Bottom pagination with series context

Best for: Workshops, multi-part tutorials, step-by-step guides

Advanced Feature: Insert <!-- SERIES_PAGES --> marker in your content to control where child pages appear (allows content before AND after the page listing)

Requirements: Pages in the series must have a series parameter in front matter:

series: ["my-workshop-series"]

Example with custom placement:

---
layout: series
---

# My Workshop Series

Welcome to this workshop series...

## Workshop Modules

<!-- SERIES_PAGES -->

## Prerequisites

Additional information after the module listing...
```### `list` Layout (Default for Index Pages)

**Purpose**: Section overview pages
**Usage**: Default for `_index.md` files, or `layout: list`
**Features**:
- Page title and description
- All markdown content rendered first
- Auto-generated child page tiles
- Clean, simple presentation

**Best for**: Section landing pages, category overviews

### Special Templates

#### `blank` Layout
**Purpose**: Minimal pages without standard site navigation
**Usage**: `layout: blank`
**Features**: Bare-bones HTML structure
**Best for**: Special-purpose pages, embeds, print versions

## Template Selection Guide

| Content Type | Recommended Template | Reason |
|--------------|---------------------|---------|
| Documentation article | `single` | Focused reading experience |
| Multi-part workshop | `series` | Sequential navigation and progress tracking |
| Workshop with custom content placement | `series` + `<!-- SERIES_PAGES -->` | Content control around page listings |
| Section landing page | `list` (default) | Overview with child page navigation |
| Category overview | `list` | Simple, clean presentation |
| Special purpose page | `blank` | Minimal interference |

## Front Matter Examples

### Basic Article
```yaml
---
title: "Getting Started with Azure CLI"
description: "Learn the basics of Azure CLI"
layout: single
---

Workshop Series

---
title: "Azure Landing Zones Workshop"
description: "Complete workshop series for ALZ"
layout: series
series: ["alz-workshop"]
---

Series with Content Control

---
title: "Advanced Kubernetes Workshop"
description: "Deep dive into Kubernetes concepts"
layout: series
series: ["k8s-advanced"]
---

Then add <!-- SERIES_PAGES --> marker in your markdown content where you want the child pages to appear.## Template Development

Creating Custom Templates

Templates are located in themes/citadel/layouts/_default/. To create a new template:

  1. Create a new .html file in the layouts directory
  2. Use Hugo template syntax and extend the base template
  3. Reference it in front matter with layout: your-template-name

Template Hierarchy

Hugo follows a specific lookup order for templates:

  1. layout: specified in front matter
  2. Section-specific template (e.g., layouts/alz/list.html)
  3. Default template (layouts/_default/list.html or single.html)

Best Practices

  1. Use single for most documentation - It’s optimized for reading
  2. Use series for sequential content - Provides navigation context
  3. Use series-split when you need content control - Allows custom placement
  4. Test your layout choice - Preview to ensure the presentation matches your intent
  5. Be consistent within sections - Use the same template for similar content types

Shortcodes vs Templates

Remember that templates control page layout, while shortcodes control content within pages:

  • Templates: Overall page structure and navigation
  • Shortcodes: Embedded content like diagrams, videos, code blocks

Both work together to create the complete page experience.

Source: https://icy-island-077f0c303-135.westeurope.4.azurestaticapps.net/about/contributing/templates/
Printed: