跳转到主要内容

将Schema.org JSON-LD添加到您的网站

项目描述

将Schema.org JSON-LD添加到您的网站

安装

wagtail-schema.org支持Wagtail 2.0及以上版本。

使用pip进行安装

$ pip install wagtail-schema.org

将其添加到您的INSTALLED_APPS以使用Django模板标记

INSTALLED_APPS = [
    ...
    'wagtailschemaorg',
    'wagtail.contrib.settings',
]

使用

wagtail-schema.org支持两种类型的schema实体:全局实体和页面特定实体。全局实体可能是整个网站所涉及的机构,而页面特定实体可能是一个人,这个人正是页面所涉及的。这两组实体都是可选的,网站可以只实现那些有意义的实体。

全局实体

全局实体使用{% ld_for_site %}模板标记打印在每一页上。它们应该是与整个网站相关的实体,例如网站涉及的组织或个人。一个网站可以有多个(或零个)全局实体。

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': 'Organization',
            '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

页面特定实体

每个页面可以指定一组相关实体。使用 {% ld_for_object page %} 来打印这些。

# this code example assumes that the Wagtail version is 3.0 or higher
from django.db import models
from wagtail.admin import FieldPanel
from wagtail.models import Page

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'),
        FieldPanel('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),
        })

在模板中

wagtail-schema.org 提供了两个模板标签:一个用于打印网站范围内的实体,另一个用于页面特定的实体。

Django 模板

确保 wagtailschemaorg 包含在您的 INSTALLED_APPS 中,并将 {% load wagtailschemaorg_tags %} 添加到模板顶部。

{% ld_for_site [site] %}

打印网站范围内的所有实体。接受一个可选的 site 参数,默认为当前模板请求上下文中的网站。有关网站范围内实体的更多信息,请参阅 register_site_thing

{% ld_for_object [obj] %}

打印 obj 的所有实体。 obj 是可选的,默认为当前模板上下文中的 pageobj 应该实现 ThingLD 接口。调用 obj.ld_to_data_list,并打印返回的所有实体。

{% ld_print_entity entity %}

直接打印实体。 entity 应该是一个包含 JSON-LD 数据的 dict

Jinja2 模板

wagtailschemaorg.jinja2tags.WagtailSchemaOrgExtension 添加到您的 Jinja2 扩展中。

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

打印网站范围内的所有实体。接受一个可选的 site 参数,默认为当前模板请求上下文中的网站。有关网站范围内实体的更多信息,请参阅 register_site_thing

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

打印 obj 的所有实体。 obj 是可选的,默认为当前模板上下文中的 pageobj 应该实现 ThingLD 接口。调用 obj.ld_to_data_list,并打印返回的所有实体。

{% ld.print_entity(entity) %}

直接打印实体。 entity 应该是一个包含 JSON-LD 数据的 dict

项目详情


下载文件

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

源分布

wagtail-schema.org-4.1.1.tar.gz (12.1 kB 查看哈希值)

上传时间 源代码

构建分布

wagtail_schema.org-4.1.1-py2.py3-none-any.whl (15.1 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者

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