Skip to main content
==================
wagtail-schema.org
==================

Add Schema.org JSON-LD to your website

Installing
==========

Install using pip::

.. code-block:: console

$ pip install wagtailschemaorg

Add it to your ``INSTALLED_APPS`` to use the Django template tags:

.. code-block:: python

INSTALLED_APPS = [
...
'wagtailschemaorg',
]

Using
=====

``wagtail-schema.org`` supports two types of schema entities:
site-wide entities and page-specific entities.
Site-wide entities might be the organisation that the site as a whole is about,
while page-specific entities might be a single person that the page in question is about.
Both sets of entities are optional, and
sites can implement only those that make sense.

Site-wide entities
---------------

A site-wide entity is printed on every page
using the ``{% ld_for_site %}`` template tag.
They should be entities that are relevant to the whole site,
such as the Organisation or Person that the site is about.
Multiple (or zero) site-wide entities can exist for a site.

.. code-block:: python

from django.db import models
from wagtail.contrib.settings.models import register_setting

from wagtailschemaorg.models import BaseLDSetting
from wagtailschemaorg.registry import register_site_thing
from wagtailschemaorg.utils import extend


@register_setting
@register_site_thing
class TestOrganisation(BaseLDSetting):
"""Details about this organisation"""
name = models.CharField(max_length=100)
phone_number = models.CharField(max_length=20)
email = models.EmailField()
twitter_handle = models.CharField(max_length=15)
facebook_url = models.URLField()

def ld_entity(self):
return extend(super().ld_entity(), {
'@type': 'Organisation',
'name': self.name,
'email': self.email,
'telephone': self.phone_number,
'sameAs': [
self.twitter_url,
self.facebook_url,
],
})

@property
def twitter_url(self):
return 'https://twitter.com/' + self.twitter_handle

.. note:: Every site-wide Thing should have a different ``@id``.
By default, the ``@id`` is the Thing's ``url``.
You can change a Thing's ``@id`` by overriding
``ld_get_id`` or ``ld_get_url`` as required.

Page-specific entities
----------------------

Each page can specify a list of relevant entities.
Use ``{% ld_for_object page %}`` to print these.

.. code-block:: python

from django.db import models
from wagtail.wagtailadmin.edit_handlers import FieldPanel
from wagtail.wagtailcore.models import Page
from wagtail.wagtailimages.edit_handlers import ImageChooserPanel

from testapp.models import TestOrganisation
from wagtailschemaorg.models import PageLDMixin
from wagtailschemaorg.utils import extend, image_ld


class PersonPage(PageLDMixin, Page):
bio = models.TextField()
date_of_birth = models.DateField()
photo = models.ForeignKey('wagtailimages.Image', on_delete=models.PROTECT)

content_panels = Page.content_panels + [
FieldPanel('bio'),
FieldPanel('date_of_birth'),
ImageChooserPanel('photo'),
]

def ld_entity(self):
site = self.get_site()
return extend(super().ld_entity(), {
'@type': 'Person',
'birthDate': self.date_of_birth.isoformat(),
'image': image_ld(self.photo, base_url=site.root_url),
'organisation': TestOrganisation.for_site(site),
})

In templates
============

``wagtail-schema.org`` provides two template tags:
one for printing out the site-wide entities and
one for page-specific entities.

Django templates
----------------

Make sure that ``wagtailschemaorg`` is in your ``INSTALLED_APPS``,
and add ``{% load wagtailschemaorg_tags %}`` to the top of your template.

``{% ld_for_site [site] %}``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Print all the site-wide entities for a site.
Takes an optional ``site`` argument,
which defaults to ``request.site`` from the current template context.
See :func:`register_site_thing` for more information on site-wide entities.

``{% ld_for_object [obj] %}``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Print all the entities for ``obj``.
``obj`` is optional, and defaults to ``page`` in the current template context.
``obj`` should implement the :class:`ThingLD` interface.
Calls ``obj.ld_to_data_list``, and prints all the entities returned.

``{% ld_print_entity entity %}``
~~~~~~~~~~~~~~~~~~~~~~~~~~

Print an entity directly. ``entity`` should be a :class:`dict` with JSON-LD data.

Jinja2 templates
~~~~~~~~~~~~~~~~

Add ``wagtailschemaorg.jinja2tags.WagtailSchemaOrgExtension`` to your Jinja2 extensions.

``{{ ld.for_site([site]) %}``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Print all the site-wide entities for a site.
Takes an optional ``site`` argument,
which defaults to ``request.site`` from the current template context.
See :func:`register_site_thing` for more information on site-wide entities.

``{% ld.for_object([obj]) %}``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Print all the entities for ``obj``.
``obj`` is optional, and defaults to ``page`` in the current template context.
``obj`` should implement the :class:`ThingLD` interface.
Calls ``obj.ld_to_data_list``, and prints all the entities returned.

``{% ld.print_entity(entity) %}``
~~~~~~~~~~~~~~~~~~~~~~~~~~

Print an entity directly. ``entity`` should be a :class:`dict` with JSON-LD data.

Metadata

Release files for wagtail-schema.org 0.2.0

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

Built distribution (wheel)

Table of built distributions (wheels) for wagtail-schema.org 0.2.0
File Interpreter ABI Platform
wagtail_schema.org-0.2.0-py2.py3-none-any.whl Python 3, Python 2 none any Details

Release files / wagtail_schema.org-0.2.0-py2.py3-none-any.whl

Download URL wagtail_schema.org-0.2.0-py2.py3-none-any.whl
Size 16.6 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
595ac7b381ed0afbea295ebd89d1f59863edfbcb526979962203cc4acdb6e015
BLAKE2b-256 checksum
How to use checksums
1d14cbfb7a3e61f7d58ace92833a6b0b325b3da210fe3d9bfcaa3cbd4fac3a8a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

5.0.0

2 release files

4.1.1

2 release files

4.1.0

2 release files

4.0.0

2 release files

3.0.0

2 release files

2.1.0

2 release files

2.0.0

2 release files

0.3.0

2 release files

This release

0.2.0 This release

1 release file

0.1.0

1 release file

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