Skip to main content

wagtail-polymath

License: BSD-3-Clause Ruff PyPI version Build status

Links

wagtail-polymath allows you to write equations in your Wagtail content using markup and render them beautifully.

wagtail-polymath provides a MathBlock so you can write equations in markup (TeX, MathML, ASCIIMath) and render them with MathJax. It features a live preview:

MathBlock uses MathJax for rendering so there is very little to do on the front end. Simply include the MathJax JS and render the raw MathBlock content as you would for any other streamfield plain text block.

wagtail-polymath even includes a template tag to include the MathJax JS for you from a CDN. By default, MathJax is configured to accept all recognised markup (TeX, MathML, ASCIIMath) and renders them to HTML. To change the configuration, point the mathjax_url setting at a URL with the ?config= you want — see Configuration below and the MathJax documentation for possible configurations.

For help on using the markup languages see the relevant MathJax documentation (e.g. https://docs.mathjax.org/en/v2.7-latest/tex.html) and the markup language-specific documentation (e.g. https://en.wikibooks.org/wiki/LaTeX)

Quickstart

Install wagtailmath:

pip install wagtailmath

Add it to your INSTALLED_APPS:

# settings.py

INSTALLED_APPS = (
    # ...
    "wagtailmath",
    # ...
)

Use MathBlock in your StreamField content:

from wagtailmath.blocks import MathBlock

class MyPage(Page):
    body = StreamField([
        ('heading', blocks.CharBlock(classname="full title")),
        ('paragraph', blocks.RichTextBlock()),
        ('equation', MathBlock())
    ])

Use the mathjax template tag in your front end template to load the MathJax library:

{% load wagtailmath %}
...

<script src="{% mathjax %}"></script>

Configuration

All wagtail-polymath settings are defined in a single WAGTAIL_POLYMATH dictionary in your settings file.

By default, wagtail-polymath loads MathJax from cdnjs, pinned to a specific version. In the Wagtail admin it is loaded with a matching Subresource Integrity (SRI) hash, so the browser can verify the script hasn't been tampered with.

If you'd rather load MathJax from a different CDN, your own static files, or a different version, set mathjax_url to the full script URL:

# settings.py
WAGTAIL_POLYMATH = {
    "mathjax_url": "https://example.com/path/to/MathJax.js?config=TeX-MML-AM_HTMLorMML",
}

Since we can't know the SRI hash for a script we don't control, setting a custom URL on its own disables integrity checking for that script (no integrity/crossorigin attributes are rendered). If you want that protection back, also set mathjax_sri to the hash for your chosen file:

# settings.py
WAGTAIL_POLYMATH = {
    "mathjax_url": "https://example.com/path/to/MathJax.js?config=TeX-MML-AM_HTMLorMML",
    "mathjax_sri": "sha256-...",
}

mathjax_sri has no effect unless mathjax_url is also set — the built-in default URL always uses its own pinned hash.

To generate the hash for your chosen file, download it and use openssl. Note that the integrity attribute requires a base64-encoded digest — sha256sum/shasum produce a hex digest instead, which will not work:

openssl dgst -sha256 -binary MathJax.js | openssl base64 -A

Prefix the output with sha256- to get the full mathjax_sri value.

mathjax_url applies both to the MathJax script loaded in the Wagtail admin (for the MathBlock live preview) and to the URL returned by the mathjax template tag. mathjax_sri only applies to the admin: the template tag returns a bare URL, so if you want integrity checking on the front end, add the attributes to your own <script> tag:

<script src="{% mathjax %}"
        integrity="sha512-..."
        crossorigin="anonymous"></script>

Note that the bundled preview JS is written against the MathJax 2 API (MathJax.Hub, MathJax.Callback) and expects one of MathJax's combined configurations — if you switch to a different version or build of MathJax, you're responsible for keeping it compatible.

Contributing

All contributions are welcome! See CONTRIBUTING.md

Supported versions:

  • Python 3.8, 3.9, 3.10, 3.11, 3.12
  • Django 4.2, 5.0
  • Wagtail 5.2 (LTS), 6.0, 6.1

Metadata

Release files for wagtailmath 1.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for wagtailmath 1.4.0
File Size Uploaded
wagtailmath-1.4.0.tar.gz 10.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for wagtailmath 1.4.0
File Interpreter ABI Platform
wagtailmath-1.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 20.9 kB

Release files / wagtailmath-1.4.0.tar.gz

Download URL wagtailmath-1.4.0.tar.gz
Size 10.2 kB
Tags Source
SHA-256 checksum
How to use checksums
9321f369e9161067983ed19df3e0ae045a0a7772f223a0663b07aa1a0b16d212
BLAKE2b-256 checksum
How to use checksums
f33274e6c6189db4d9ec5ec7763f16c92d4091567f5ff95243eac19f7aeca23e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 6, 2026.

Transparency log

Release files / wagtailmath-1.4.0-py3-none-any.whl

Download URL wagtailmath-1.4.0-py3-none-any.whl
Size 10.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
141b05be94e21e4b0d60668f40899b4f6cd95f8b7c3341e861cffab9128864e8
BLAKE2b-256 checksum
How to use checksums
2d7c22da03846ae36eaee66e46b5c5737fb256a8b2bda17bf6f8143e9c2543f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 6, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.4.0 This release

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page