Skip to main content

A tool to assist with metadata for social media.

Project description

https://gitlab.com/neonjungle/wagtail-metadata/badges/master/pipeline.svg

This plugin adds custom properties to your page models and then lets you output meta-attribute tags using the included template tag. These tags help with search engine optimisations and for creating nice shareable links for social media, mainly Facebook and Twitter.

Compatibility

Wagtail-metadata works with Wagtail v2.0 and upwards.

Installing

First, install using pip:

pip install wagtail-metadata

Then add wagtailmetadata to your project’s INSTALLED_APPS:

INSTALLED_APPS = [
    'home',
    'search',
    # etc...

    'wagtail.contrib.settings',
    'wagtail.contrib.modeladmin',
    # etc...

    # Add the following:
    'wagtailmetadata',

]

Using

Pages should inherit from wagtailmetadata.models.MetadataPageMixin. This provides a search_image field in the Wagtail interface for that page type. The description for the page will be pulled from the search_description page. Metadata for the page will then be built from the page details.

from wagtail.core.models import Page
from wagtailmetadata.models import MetadataPageMixin

class ContentPage(MetadataPageMixin, Page):
    pass

If you want to use this with a non-page model, or want to use a different implementation for the fields, you can inherit from wagtailmetadata.models.MetadataMixin. You will need to implement the following methods:

from wagtailmetadata.models import MetadataMixin

class CustomObject(MetadataMixin, object):
    def get_meta_title(self):
        """The title of this object"""
        return "My custom object"

    def get_meta_url(self):
        """The URL of this object, including protocol and domain"""
        return "http://example.com/my-custom-object/"

    def get_meta_description(self):
        """
        A short text description of this object.
        This should be plain text, not HTML.
        """
        return "This thing is really cool, you should totally check it out"

    def get_meta_image_url(self, request):
        """
        Return a url for an image to use, see the MetadataPageMixin if using a Wagtail image
        """
        return 'https://neonjungle.studio/share.png'

    def get_meta_twitter_card_type(self):
        """
        What kind of Twitter card to show this as.
        Defaults to ``summary_large_photo`` if there is a meta image,
        or ``summary`` if there is no image. Optional.
        """
        return "summary_large_photo"

If your custom object uses Wagtail images, you may wish to use the intermediary mixin wagtailmetadata.models.WagtailImageMetadataMixin so you can use the relationship for the image related metadata:

from django.db import models
from wagtailmetadata.models import WagtailImageMetadataMixin

class CustomObject(WagtailImageMetadataMixin, object):
    share_image = models.ForeignKey('wagtailimages.Image', ondelete=models.SET_NULL, null=True, related_name='+')

    def get_meta_image(self):
        return self.share_image

Display

Django

To use this in a template, first load the template tag library, and then insert the metadata by placing {% meta_tags %} into the <head>:

{% load wagtailmetadata_tags %}
{% meta_tags %}

By default, this will look for a self object in the context to pull the metadata from. You can specify a different object to use if you need to:

{% load wagtailmetadata_tags %}
{% meta_tags my_custom_object %}

Jinja2

Add wagtailmetadata.jinja2tags.WagtailMetadataExtension to the template extensions in your settings.py:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        'OPTIONS': {
            'extensions': [
                'wagtailmetadata.jinja2tags.WagtailMetadataExtension'
            ],
        },
    }
]

Insert the metadata by placing {{ meta_tags() }} into the <head>:

{{ meta_tags() }}

By default, this will look for a page object in the context to pull the metadata from. You can specify a different object to use if you need to:

{{ meta_tags(my_custom_object) }}

Troubleshooting

‘meta_tags’ missing request from context

The template that is trying to render the meta_tags tag does not have a request object in the context.

‘meta_tags’ tag is missing a model or object

There was no model passed to the template tag, or self is not found in the current context.

Adding extra tags

If you need to add extra meta tags, to add the twitter:site tag for example, you can extend the Wagtail Metadata template. First, create any models that you might need to hold the extra data:

from wagtail.contrib.settings.models import BaseSetting, register_setting

@register_setting
class TwitterName(BaseSetting):
    handle = models.CharField(max_length=20)

You could also add extra fields to a page model and output them as meta tags:

class MyPage(MetadataPageMixin, Page):
    body = RichTextField()
    author_twitter_handle = models.CharField(max_length=20)

Then, override the wagtailmetadata/parts/tags.html template and add your tags to the relevant blocks:

{% extends "wagtailmetadata/parts/tags.html" %}

{% block twitter %}
    {{ block.super }}
    <meta name="twitter:site" content="@{{ settings.myapp.TwitterName.twitter_handle }}" />
    <meta name="twitter:creator" content="@{{ model.author_twitter_handle }}" />
{% endblock %}

The wagtailmetadata/parts/tags.html template defines the following blocks you can override or extend:

{% block tags %}

This block surrounds the whole template. You can override this block to append extra tags before or after the standard tags.

{% block twitter %}

This block surrounds the Twitter card tags.

{% block opengraph %}

This block surrounds the Open Graph tags

{% block meta %}

This block surrounds the standard meta tags defined in HTML.

Customising the share image rendition

By default, the share image rendition is set to original and will use the full size image.

If you wish to use a different rendition, you can set the WAGTAILMETADATA_IMAGE_FILTER setting to change the filter used. e.g.

WAGTAILMETADATA_IMAGE_FILTER = 'fill-1200x630'

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wagtail-metadata-4.0.3.tar.gz (10.1 kB view details)

Uploaded Source

Built Distribution

wagtail_metadata-4.0.3-py2.py3-none-any.whl (12.5 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file wagtail-metadata-4.0.3.tar.gz.

File metadata

  • Download URL: wagtail-metadata-4.0.3.tar.gz
  • Upload date:
  • Size: 10.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.10

File hashes

Hashes for wagtail-metadata-4.0.3.tar.gz
Algorithm Hash digest
SHA256 c9a297ffe14ec9f1ce269ba6f11127d55f3af0c3ad0b92d66d69727c48c38c46
MD5 2dcbd62b582d228613ef47094c91be97
BLAKE2b-256 897a6227f716928fa2c7476f9781f42dfa4e5426d6ad26f7bd08d9c2595a1a92

See more details on using hashes here.

File details

Details for the file wagtail_metadata-4.0.3-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for wagtail_metadata-4.0.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 e993c60b2dbc868f1fae9153d278a85997ba16cb9c6add6a7b88c5d557d29db2
MD5 8a5645b033456ef30ef2b2ba91af801f
BLAKE2b-256 c0194dd499c74606d17887e27414cc77e64eadfb7ec1bfe70516632c37c604f8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page