将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。 您可以通过重写来更改对象的@idld_get_idld_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是可选的,在当前模板上下文中默认为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参数, 从当前模板上下文默认为request.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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JMF替换   java从apache网站导入库   如何在cmd/sudo中输入参数并在运行时使用它们?(爪哇)   java如何在page zk framework中触发任何选定的手动事件时保存textbox值   java如何在安卓应用程序中读取弹出窗口中的文本?   java my jsonarray不显示在我的arraylist中   java Spring如何用环境变量替换${}?   JavaRxJava2:迭代项并获得与条件匹配的项   java My mavenearplugin不尊重bundleFileName吗?   java Dropwizard V2端点   java修复语法或拼写错误?   java Netty 4.0 HTTP块内存泄漏?   链表Java结构(泛型)   java在Windows下的Eclipse SWT中使用64位XulRunner