我想为我的客户创建鹡鸰网站。这些网站将是相同的并具有相同的功能,但模板应该不同。每次我将功能更新到新版本时,所有网站都会自动获取最新版本。通过这种方法,我不需要单独向我的客户部署新的功能版本(或基础网站版本)。我只需要部署一次,所有客户端都将获得最新的网站版本。我将使用 Wagtail 的“多实例”功能,这似乎符合我的需求。
在“多实例”文档中指出:
多个站点共享相同的一组项目文件。 部署将更新单组项目文件并重新加载 每个实例。
https://www.accordbox.com/blog/add-bootstrap-theme-wagtail/
假设我想在本教程中使用两个不同的博客模板(不同的 Bootstrap 主题)。博客模板文件是“post_page.html”,是一个项目文件,因此只会部署一次,并且在Wagtail的“多实例”功能中所有网站都会获得相同的模板。
所以我的问题是:
如何将一个博客模板 (post_page.html) 部署到一个客户网站,并将另一个博客模板部署到另一个客户网站?
我认为您会希望在代码库中包含所有模板变体,然后在请求时选择要使用的模板变体。要动态选择模板文件,您可以创建一个 get_template 方法。
所以问题就变成了如何配置哪个网站使用哪个模板。我建议查看 wagtail.contrib.settings 寻找将站点映射到其模板的位置。在我工作的地方,我们支持 3 种变体 - 但它们是一组的。您不能从 A 中选择博客模板并与 B 中的日历模板混合。我们这样做是为了我们自己的理智 - 特别是因为我们的许多块都支持自己的显示选项;例如,此处的3个显示选项只是用户可以为同一块选择的样式。
您可以使用以下方法(从用于多站点 Wagtail 的Phoebe Factorial 解决方案转换而来。)
class SitePage(Page):
def get_template(self, request):
template_name = super().get_template(request)
DOMAIN = settings.DOMAIN
return [
settings.DOMAIN + '/' + template_name,
template_name,
]
class Meta(Page.Meta):
abstract = True
class BlogPage(SitePage):
...
这将在以下有序位置查找模板:
当然,如果您不想默认使用通用模板,则可以删除 SitePage 返回列表中的第二项。