我目前正在使用单个Wagtail安装构建两个站点。这些网站适用于公司及其姊妹公司,内容有些重叠。理想情况下,我们不希望两次发布相同的内容。特别是我们在两个站点都有一个活动页面,可能会有与两家公司相关的活动。
问题是Wagtail页面一次只能存在于树中的一个位置。我考虑过创建一个" MirroredEventPage"原始EventPage模型只有一个外键字段的模型,尽管这种方法在编写EventIndex页面和重用模板时遇到了问题。
我还考虑将事件创建为一个非常理想的香草Django模型。
有没有人遇到类似的问题,并找到了一个很好的解决方案?
答案 0 :(得分:0)
一个想法是在你的事件索引页面上混合使用Wagtail Snippets和RoutablePageMixin
。
<强> 1。制作活动代码段
将“活动”页面的共享内容制作为Wagtail Snippet。您将失去访问更改版本的能力,但却能够跨站点共享。
http://docs.wagtail.io/en/v1.13/topics/snippets.html
<强> 2。更新您的事件索引页面模型以使用RoutablePageMixin
http://docs.wagtail.io/en/v1.13/reference/contrib/routablepage.html
然后,如果它们具有mydomain.com/events/123-event-name-as-slug
之类的内容,您可以挂钩任何事件索引页面的URL调用。这可以加载自定义模板(可以共享或不共享,具体取决于站点),以及通过上下文发送的事件索引和事件片段。
这些网址将是他们自己唯一的网址,但实际上并没有网页。请记住考虑您的搜索引擎优化含义,确保管理员编辑可以管理代码段上的元描述(或通过自动传播的方式)。
您还可以勾选Wagtail按钮(称为Wagtail用户栏),以便在编辑单击前端Wagtail按钮并单击&#39;编辑事件&#39;它可以直接将它们带到admin中的Snippet编辑页面。
http://docs.wagtail.io/en/v1.13/reference/hooks.html#construct-wagtail-userbar
第3。更新活动索引列表
如果您在两个站点上都不想要某些事件,则可以为您运营的两个站点添加复选框(默认情况下都勾选)。这意味着“事件索引”页面仅显示与该站点相关的事件。
您可以通过覆盖页面模型上的serve方法来完成此操作。
注意:在此示例中,您没有明确地将每个事件链接到每个站点的事件索引页面。您只是加载相关事件的查询并将其传递给事件索引模板。
<强> 4。更复杂的整合
如果您真的想要为每个活动提供单独的页面。在每个站点下,您可以在Snippet创建/编辑/删除时创建自定义信号。
Wagtail信号简介: http://docs.wagtail.io/en/v1.13/reference/signals.html
您可能希望确保字段在页面编辑中不可编辑,但可以在片段下进行编辑。然后你只是让你的信号与你的信号保持同步,有点凌乱,但却给你一个真实的&#39;页面&#39;在管理员。