将schema.org json-ld添加到您的网站
wagtail-schema.org的Python项目详细描述
将schema.org json-ld添加到您的网站
安装
wagtail-schema.org支持wagtail 2.0以上版本。
使用pip安装:
$ pip install wagtail-schema.org
将其添加到INSTALLED_APPS中以使用Django模板标记:
INSTALLED_APPS=[...'wagtailschemaorg',]
使用
wagtail-schema.org支持两种类型的架构实体: 站点范围的实体和页面特定的实体。 站点范围的实体可能是整个站点所涉及的组织, 而特定于页面的实体可能是相关页面所涉及的单个人员。 两组实体都是可选的,并且 网站只能实现那些有意义的东西。
站点范围的实体
每页都打印一个站点范围的实体 使用{% ld_for_site %}模板标记。 它们应该是与整个站点相关的实体, 例如网站所涉及的组织或人员。 站点可以存在多个(或零)站点范围实体。
fromdjango.dbimportmodelsfromwagtail.contrib.settings.modelsimportregister_settingfromwagtailschemaorg.modelsimportBaseLDSettingfromwagtailschemaorg.registryimportregister_site_thingfromwagtailschemaorg.utilsimportextend@register_setting@register_site_thingclassTestOrganisation(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()defld_entity(self):returnextend(super().ld_entity(),{'@type':'Organization','name':self.name,'email':self.email,'telephone':self.phone_number,'sameAs':[self.twitter_url,self.facebook_url,],})@propertydeftwitter_url(self):return'https://twitter.com/'+self.twitter_handle
注意
每个站点范围的东西都应该有不同的@id。 默认情况下,@id是对象的url。 您可以通过重写来更改对象的@id。 ld_get_id或ld_get_url根据需要。
页面特定实体
每个页面都可以指定相关实体的列表。 使用{% ld_for_object page %}打印这些。
fromdjango.dbimportmodelsfromwagtail.admin.edit_handlersimportFieldPanelfromwagtail.core.modelsimportPagefromwagtail.images.edit_handlersimportImageChooserPanelfromtestapp.modelsimportTestOrganisationfromwagtailschemaorg.modelsimportPageLDMixinfromwagtailschemaorg.utilsimportextend,image_ldclassPersonPage(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'),]defld_entity(self):site=self.get_site()returnextend(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参数, 从当前模板上下文默认为request.site。 有关站点范围实体的详细信息,请参见register_site_thing。
{% ld_for_object [obj] %}
打印obj的所有实体。 obj是可选的,在当前模板上下文中默认为page。 obj应该实现ThingLD接口。 调用obj.ld_to_data_list,并打印返回的所有实体
{% ld_print_entity entity %}
直接打印实体。entity应该是带有json-ld数据的dict。
Jinja2模板
将wagtailschemaorg.jinja2tags.WagtailSchemaOrgExtension添加到Jinja2扩展中
{{ ld.for_site([site]) %}
打印站点的所有站点范围实体。 接受可选的site参数, 从当前模板上下文默认为request.site。 有关站点范围实体的详细信息,请参见register_site_thing。
{% ld.for_object([obj]) %}
打印obj的所有实体。 obj是可选的,在当前模板上下文中默认为page。 obj应该实现ThingLD接口。 调用obj.ld_to_data_list,并打印返回的所有实体
{% ld.print_entity(entity) %}
直接打印实体。entity应该是带有json-ld数据的dict。