TNA Frontend Jinja
TNA Frontend Jinja templates are a Jinja implementation of the templates provided as part of TNA Frontend as well as widgets for WTForms.
# Install with Poetry
poetry add tna-frontend-jinja
# Install with pip
pip install tna-frontend-jinja
See the documentation.
Quickstart for Flask projects
Use the Flask application's jinja_loader to allow templates included from either your app (in the below example called app) and the tna_frontend_jinja package.
Ensure your application is first on the list. This means you can overwrite the standard templates by creating a template with the same filename in your project.
from flask import Flask
from jinja2 import ChoiceLoader, PackageLoader
def create_app():
app = Flask(__name__)
app.jinja_loader = ChoiceLoader(
[
PackageLoader("app"), # Use your application directory here
PackageLoader("tna_frontend_jinja"),
]
)
Quickstart for Django projects
Update the TEMPLATES setting in your application config:
TEMPLATES = [
# Add the Jinja2 backend first
{
"BACKEND": "django.template.backends.jinja2.Jinja2",
"DIRS": [
os.path.join(BASE_DIR, "app/templates"), # Use your application directory here
os.path.join(get_path("platlib"), "tna_frontend_jinja/templates"),
],
"APP_DIRS": True,
"OPTIONS": {
"environment": "config.jinja2.environment",
},
},
# The DjangoTemplates backend is still needed for tools like Django admin and the debug toolbar
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
],
},
},
]
Ensure your application is first on the list of template directories. This means you can overwrite the standard templates by creating a template with the same filename in your project.
Using the templates
{%- from 'components/button/macro.html' import tnaButton -%}
{{ tnaButton({
'text': 'Save and continue'
}) }}
The options available to each component macro can be found in the National Archives Design System Components documentation.
⚠️ The included templates are a like-for-like port, the only difference between the Nunjucks examples and their Jinja equivalents is having to quote key names, e.g.
'text'instead oftext.
We test each component against its published component fixtures to ensure complete compatibility.
Overriding templates
To make modifications to the templates, create a new file in your applciation templates directory with the same name as the template you want to customise.
For example, if your application templates directory is app/templates, create app/templates/components/button/macro.html and insert your own HTML using the same macro name (e.g. tnaButton).
This way you can continue to use the same import (e.g. {%- from 'components/button/macro.html' import tnaButton -%}) but introduce your own bespoke functionality.
WTForms support
# Install with Poetry
poetry add tna-frontend-jinja[wtforms]
# Install with pip
pip install tna-frontend-jinja[wtforms]
See the TNA Frontend Jinja WTForms docs for more information.
Running tests
# Start the test server
docker compose up -d
# Install the dependencies
npm install
# Run the fixture tests
npm run test:fixtures
# Run the Playwright tests
npm run test:playwright
# Run the Python tests
docker compose exec app poetry run python -m pytest
Styles and JavaScript
The CSS and JavaScript are not included in the PyPI package. You must install them separately.
Install and use the @nationalarchives/frontend package from npm with npm install @nationalarchives/frontend.
Ensure you install the correct version of TNA Frontend for the version of the templates you are using.
Compatibility with TNA Frontend
v1+
| TNA Frontend Jinja | Compatible TNA Frontend version(s) |
|---|---|
1.6.x |
1.6.1, 1.6.2, 1.6.3 |
1.5.0 |
1.5.x |
1.4.0 |
1.4.x |
1.3.0 |
1.3.x |
1.2.0 |
1.2.x |
1.1.0 |
1.1.x |
1.0.0 |
1.0.x |
v0.3.x
| TNA Frontend Jinja | Compatible TNA Frontend version(s) |
|---|---|
0.44.0 |
0.44.x |
0.43.0 |
0.43.x |
0.42.0 |
0.42.x |
0.41.0 |
0.41.x |
0.40.0 |
0.40.x |
0.38.0 |
0.38.x |
0.38.0 |
0.38.x |
0.37.0 |
0.37.x |
0.36.0 |
0.36.x |
0.35.x |
0.35.1 |
0.34.0 |
0.34.x |
0.33.0 |
0.33.x |
0.32.0 |
0.32.x |
0.31.x |
0.31.x |
0.30.0 |
0.30.x |
0.29.1 |
0.29.1 |
0.29.0 |
0.29.0 |
0.28.0 |
0.28.x |
0.27.0 |
0.27.x |
0.26.0 |
0.26.x |
0.25.0 |
0.25.x |
0.24.0 |
0.24.x |
0.23.0 |
0.23.x |
0.22.0 |
0.22.x |
0.21.0 |
0.21.x |
0.20.1 |
0.20.1 |
0.20.0 |
0.20.0 |
0.19.0 |
0.19.x |
0.18.0 |
0.18.x |
0.17.0 |
0.17.x |
0.16.0 |
0.16.x |
0.15.0 |
0.15.x |
0.14.0 |
0.14.x |
0.13.0 |
0.13.x |
0.12.0 |
0.12.x |
0.11.0 |
0.11.x |
0.10.0 |
0.10.x |
0.9.0 |
0.9.x |
0.8.1 |
0.8.1 |
0.8.0 |
0.8.0 |
0.7.0 |
0.7.x |
0.6.0 |
0.6.x |
0.5.0 |
0.5.x |
0.4.0 |
0.4.x |
0.3.0 |
0.3.x |
v0.2.x
| TNA Frontend Jinja | Compatible TNA Frontend version(s) |
|---|---|
0.2.18 |
0.2.18 |
0.2.17 |
0.2.17 |
0.2.16 |
0.2.16 |
0.2.15 |
0.2.15 |
0.2.14 |
0.2.14 |
0.2.13 |
0.2.13 |
0.2.12 |
0.2.12 |
0.2.11 |
0.2.11 |
0.2.10 |
0.2.10 |
0.2.9 |
0.2.9 |
0.2.8 |
0.2.8 |
0.2.7 |
0.2.7 |
0.2.6 |
0.2.6 |
0.2.5 |
0.2.5 |
0.2.4 |
0.2.4 |
0.2.3 |
0.2.3 |
0.2.2 |
0.2.2 |
0.2.1 |
0.2.1 |
0.2.0 |
0.2.0 |
v0.1.x
| TNA Frontend Jinja | Compatible TNA Frontend version(s) |
|---|---|
0.1.34 |
0.1.65 |
0.1.33 |
0.1.62, 0.1.63, 0.1.64 |
0.1.32 |
0.1.60, 0.1.61 |
0.1.31 |
0.1.59 |
0.1.30 |
0.1.58 |
0.1.29 |
0.1.57 |
0.1.28 |
0.1.55, 0.1.56 |
0.1.27 |
0.1.54 |
0.1.26 |
0.1.53 |
0.1.25 |
0.1.51, 0.1.52 |
0.1.23, 0.1.24 |
0.1.50 |
0.1.21, 0.1.22 |
0.1.49 |
0.1.20 |
0.1.48 |
0.1.19 |
0.1.45, 0.1.46, 0.1.47 |
0.1.18 |
0.1.44 |
0.1.17 |
0.1.43 |
0.1.15, 0.1.16 |
0.1.42 |
0.1.14 |
0.1.40, 0.1.41 |
0.1.13 |
0.1.39 |
0.1.12 |
0.1.37, 0.1.38 |
0.1.11 |
0.1.36 |
0.1.10 |
0.1.34, 0.1.35 |
0.1.9 |
0.1.33 |
0.1.7, 0.1.8 |
0.1.31, 0.1.32 |
0.1.6 |
0.1.29-prerelease, 0.1.30 |
0.1.0–0.1.5 |
[latest from main branch when published] |
Metadata
Release files for tna-frontend-jinja 1.6.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| tna_frontend_jinja-1.6.1.tar.gz | 38.7 kB | With provenance | Details for tna_frontend_jinja-1.6.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| tna_frontend_jinja-1.6.1-py3-none-any.whl | Python 3 | none | any | Details for tna_frontend_jinja-1.6.1-py3-none-any.whl |
Total release size: 111.0 kB
Release files / tna_frontend_jinja-1.6.1.tar.gz
| Download URL | tna_frontend_jinja-1.6.1.tar.gz |
|---|---|
| Size | 38.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
de8c6e136276472717ee19c407af9d9d5c7a9a7e2b3800200bf021aa89de589b
|
|
BLAKE2b-256 checksum How to use checksums |
8b802ff7e575101c977a50d401c81e87bf56623c5e83a1554271a9ec514e79f2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.
Transparency logRelease files / tna_frontend_jinja-1.6.1-py3-none-any.whl
| Download URL | tna_frontend_jinja-1.6.1-py3-none-any.whl |
|---|---|
| Size | 72.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fefc75754781d741993de6aebe3b1d87d52572df24bbb31e164e35a9356df2ea
|
|
BLAKE2b-256 checksum How to use checksums |
82143ef24d40cf0f1cd887b970f799c5c715b19ef4683f7eca407721a9533e78
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.
Transparency logSecurity for tna-frontend-jinja 1.6.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for tna_frontend_jinja-1.6.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.