A web template is a file with a fixed page layout, written in HTML (HyperText Markup Language), that leaves empty spots for content. A template engine fills those spots with data, so one template can make many pages.
History of Web template
Creator: No single creator is named in the Wikipedia article. Year: 2014.
Wikipedia describes early server-side templating as software adapted for the web. The first tools were preprocessors and macro languages. They ran on the Common Gateway Interface (CGI), a method that lets a web server run programs. Developers used them to generate dynamic pages from templates. The Wikipedia article gives no dates for these early tools.
The next step was direct execution in extension modules. The first example named is Server Side Includes (SSI). SSI places directives inside HTML comments. The server reads each directive and inserts the result before the page reaches the browser. The Apache HTTP Server documents SSI in its mod_include module, which evaluates these directives.
HTML editors also used templates. FrontPage and Dreamweaver are named as editors with template sub-systems. Editors used templates to produce static pages. The article calls these ready-made designs. They were used to mass-produce cookie-cutter websites for rapid deployment, with themes in place of CSS (Cascading Style Sheets) styles.
The W3C (World Wide Web Consortium) published HTML5 as a Recommendation on 28 October 2014. The WHATWG (Web Hypertext Application Technology Working Group) maintains the HTML Living Standard. That standard defines a template element. The element holds markup that does not render when the page loads. A script can copy it into the page later, so the browser needs no server-side engine for it.
Static site generators also use templates. Wikipedia lists Jekyll with Liquid and Ruby, Hugo with Go templates, and Pelican with Jinja2 and Python. Each one turns plain text files into static web pages. Hosted builders such as Wix also provide template-based systems. Users make pages through a graphical interface, without writing programs.
Changelog and latest update
The W3C publication history lists the HTML5 Candidate Recommendation on 17 December 2012. The Recommendation followed on 28 October 2014. The W3C marks that Recommendation as retired on 27 March 2018. These dates show the path of the HTML5 standard that page templates use.
MDN (Mozilla Developer Network) lists the template element as available across browsers since November 2015. MDN labels the element with Baseline status. The element holds HTML that is not rendered when the page loads. A script can add its content to the page later.
The Django documentation says that support for loading template partials was added in Django 6.0. A partial is a named fragment of a template. The documentation states that a loaded partial behaves like a regular Template object. It contains only the partial content, so a view can render one fragment.
The Jinja documentation lists version 3.1.6 as the newest entry in its change list. The page describes Jinja as a templating engine for Python. Its documentation shows the BSD-3-Clause License. Jinja is one of the template engines named in the Wikipedia article.
The Apache HTTP Server tutorial on Server Side Includes covers version 2.4. It shows how the echo directive prints the server date. The tutorial also explains that browsers ignore SSI directives when SSI is off. The directives sit inside HTML comments, so a page still displays without the server step.
Latest update: HTML Living Standard, template element (section 4.12.3), 2026-10-12
The WHATWG lists the HTML Living Standard as last updated on 12 October 2026. Section 4.12.3 defines the template element. The section says a template holds HTML that is not rendered when the page loads, and a script can add it later. The section also advises against client-side XSLT (Extensible Stylesheet Language Transformations) in browsers, because browser XSLT code is highly susceptible to memory safety vulnerabilities.
Usage examples
A web template has two parts. The first part is the fixed layout of the page. The second part is a set of placeholders. A template engine reads the template, fills each placeholder with data, and sends the finished page. The examples show five common forms: the HTML template element with a script, a Django template, a Jinja template in Python, and an Apache SSI include. Each example is a short fragment. The Django and Jinja examples need their packages installed first. The SSI example needs SSI enabled on the Apache server.
<template id="card">
<div class="card">
<h2 class="title"></h2>
</div>
</template>This markup defines a reusable card. The template element keeps the card out of the page until a script adds it. The empty h2 element with the class title is the placeholder that the script fills. The browser does not show the template contents when the page loads.
const t = document.getElementById("card");
const copy = t.content.cloneNode(true);
copy.querySelector(".title").textContent = "Plans";
document.body.appendChild(copy);This script finds the card template and copies its content. It sets the title placeholder to the text Plans. Then it adds the copy to the end of the page body. The original template stays unchanged, so the script can copy it again for another card.
<h1>{{ page_title }}</h1>
{% for item in items %}
<p>{{ item.name }}</p>
{% endfor %}The double braces mark a variable that Django replaces with data from the view. The for tag repeats the paragraph once for each item in the list. The Django template language uses these tags and variables. The Django documentation describes this syntax under Templates.
from jinja2 import Environment
from jinja2 import FileSystemLoader
env = Environment(
loader=FileSystemLoader("templates"))
tpl = env.get_template("page.html")
print(tpl.render(title="Home"))The code loads templates from the templates folder. It renders the page.html file with the title value Home. The render call returns the finished HTML as a string. The page.html file needs a title placeholder to receive this value. Jinja uses the same idea of placeholders as Django.
<!--#include virtual="/includes/header.html" -->
<main>
<h1>Page title</h1>
</main>
<!--#include virtual="/includes/footer.html" -->The include directives place a header file at the top of the page and a footer file at the bottom. The server inserts both files before it sends the page. The directive sits in an HTML comment, so a browser ignores it when SSI is off. The header and footer files act as shared template parts.
References
These sources are outside Websnoogie and were checked on 2026-10-12.
Web template system
Wikipedia, Wikimedia Foundation
Encyclopedia article on web template systems. It covers the template engine, the template and content resources, server-side and client-side systems, static site generators and the early CGI and SSI tools.
<template>: The HTML content template element
MDN Web Docs, Mozilla
Reference page for the template element. It describes what the element holds, how a script uses it, and the browser support date. It lists the Baseline status for the element and the year it became supported across browsers.
HTML Living Standard, section 4.12.3 The template element
WHATWG
Specification text for the template element in the HTML Living Standard. It defines the element as a mechanism for holding HTML that is not rendered at load. It also covers XSLT and XPath interaction with templates.
HTML5 publication history
W3C
W3C table of dates for the HTML5 specification. It lists the Candidate Recommendation of 17 December 2012, the Recommendation of 28 October 2014 and the retired status dated 27 March 2018.
Apache HTTP Server Tutorial: Server Side Includes
Apache Software Foundation
Tutorial for SSI on Apache HTTP Server version 2.4. It explains the directive syntax, the include and echo directives, how to enable SSI and how the server evaluates the directives before it sends the page.
Templates, Django documentation
Django Software Foundation
Documentation for the Django template language. It covers variables, tags, filters, template loading and template partials, including the partial support added for the DjangoTemplates backend in Django 6.0.
Jinja Documentation (3.1.x)
Pallets Projects
Documentation for Jinja, a templating engine for Python. It covers the API, template syntax, loaders, autoescaping and the change list, which ends with version 3.1.6 in the 3.1.x series.
One layout, many pages
When nobody checks a template, one wrong phone number repeats on every page built from it. A template holds the shared parts of a site, so a small mistake spreads fast. We keep the shared layout clean, and we check it before it goes live. Then one fix updates each page that uses it.
A move to a new host can break a template in quiet ways. Forms, menus and page links may stop working after the switch. Ordinary-size WordPress sites change hosts at no charge. Anything bigger costs $199, paid once. We check each page once the move is done.
Our doors stay open seven days a week, 7 am through 10 pm. Dial 402-813-4034 and give us your site address and a rough page count. Bring your questions about forms, menus and page links too. We will tell you whether your move is free or costs $199 one time. You can also ask how a new layout would look on your phone.
Next, pick the way that suits you. Ring 402-813-4034 today, or read about the $300 website and what it includes.
