跳转到主要内容

用于社交媒体元数据的辅助工具。

项目描述

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

此插件为您页面模型添加自定义属性,然后允许您使用包含的模板标签输出元属性标签。这些标签有助于搜索引擎优化并为社交媒体创建可分享的链接,主要是 Facebook 和 Twitter。

兼容性

Wagtail-metadata 与 Wagtail v5.0 及以上版本兼容。有关与较旧版本的 Wagtail 的兼容性,请参阅以前的版本。

安装

首先,使用 pip 进行安装

pip install wagtail-metadata

然后,将 wagtailmetadata 添加到项目的 INSTALLED_APPS

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

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

    # Add the following:
    'wagtailmetadata',

]

使用

页面应继承自 wagtailmetadata.models.MetadataPageMixin。这将在Wagtail界面为该页面类型提供一个 search_image 字段。页面的描述将来自 search_description 页面。页面的元数据将基于页面详情构建。

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

class ContentPage(MetadataPageMixin, Page):
    pass

如果您想与非页面模型一起使用此功能,或者想为字段使用不同的实现,可以继承自 wagtailmetadata.models.MetadataMixin。您需要实现以下方法

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"

如果您的自定义对象使用Wagtail图像,您可能希望使用中间混入类 wagtailmetadata.models.WagtailImageMetadataMixin,这样您就可以使用图像相关元数据的关系

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

显示

Django

要在模板中使用此功能,首先加载模板标签库,然后在 <head> 中插入元数据,将 {% meta_tags %} 放入其中

{% load wagtailmetadata_tags %}
{% meta_tags %}

默认情况下,这将查找上下文中的 self 对象以提取元数据。如果需要,您可以指定要使用的不同对象

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

Jinja2

wagtailmetadata.jinja2tags.WagtailMetadataExtension 添加到 settings.py 中的模板扩展

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

通过在 <head> 中插入 {{ meta_tags() }} 来插入元数据

{{ meta_tags() }}

默认情况下,这将查找上下文中的 page 对象以提取元数据。如果需要,您可以指定要使用的不同对象

{{ meta_tags(my_custom_object) }}

故障排除

上下文中缺少请求 'meta_tags'

尝试渲染 meta_tags 标签的模板在上下文中没有 request 对象。

'meta_tags' 标签缺少模型或对象

没有将模型传递给模板标签,或当前上下文中找不到 self

添加额外标签

如果您需要添加额外的元标签,例如添加twitter:site标签,可以扩展Wagtail元数据模板。首先,创建您可能需要的任何模型以保存额外数据

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

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

您还可以向页面模型添加额外字段并将它们作为元标签输出

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

然后,覆盖 wagtailmetadata/parts/tags.html 模板并将您的标签添加到相关块中

{% 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 %}

wagtailmetadata/parts/tags.html 模板定义了以下您可以使用或扩展的块

{% block tags %}

此块包围整个模板。您可以通过覆盖此块来在标准标签之前或之后附加额外的标签。

{% block twitter %}

此块包围Twitter卡片标签。

{% block opengraph %}

此块包围Open Graph标签

{% block meta %}

此块包围HTML中定义的标准元标签。

自定义分享图像渲染

默认情况下,分享图像渲染设置为 original 并将使用全尺寸图像。

如果您希望使用不同的渲染,可以将 WAGTAILMETADATA_IMAGE_FILTER 设置更改为更改使用的过滤器。例如。

WAGTAILMETADATA_IMAGE_FILTER = 'fill-1200x630'

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

wagtail-metadata-5.0.0.tar.gz (10.2 kB 查看哈希值)

上传时间

构建分发

wagtail_metadata-5.0.0-py2.py3-none-any.whl (12.6 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页