Wagtail 部署多个客户端网站的最佳方式

问题描述 投票:0回答:2

我想为我的客户创建鹡鸰网站。这些网站将是相同的并具有相同的功能,但模板应该不同。每次我将功能更新到新版本时,所有网站都会自动获取最新版本。通过这种方法,我不需要单独向我的客户部署新的功能版本(或基础网站版本)。我只需要部署一次,所有客户端都将获得最新的网站版本。我将使用 Wagtail 的“多实例”功能,这似乎符合我的需求。

在“多实例”文档中指出:

多个站点共享相同的一组项目文件。 部署将更新单组项目文件并重新加载 每个实例。

https://www.accordbox.com/blog/add-bootstrap-theme-wagtail/

假设我想在本教程中使用两个不同的博客模板(不同的 Bootstrap 主题)。博客模板文件是“post_page.html”,是一个项目文件,因此只会部署一次,并且在Wagtail的“多实例”功能中所有网站都会获得相同的模板。

所以我的问题是:

如何将一个博客模板 (post_page.html) 部署到一个客户网站,并将另一个博客模板部署到另一个客户网站?

python django wagtail
2个回答
1
投票

我认为您会希望在代码库中包含所有模板变体,然后在请求时选择要使用的模板变体。要动态选择模板文件,您可以创建一个 get_template 方法。

所以问题就变成了如何配置哪个网站使用哪个模板。我建议查看 wagtail.contrib.settings 寻找将站点映射到其模板的位置。在我工作的地方,我们支持 3 种变体 - 但它们是一组的。您不能从 A 中选择博客模板并与 B 中的日历模板混合。我们这样做是为了我们自己的理智 - 特别是因为我们的许多块都支持自己的显示选项;例如,此处的3个显示选项只是用户可以为同一块选择的样式。


0
投票

您可以使用以下方法(从用于多站点 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):
    ...

这将在以下有序位置查找模板:

  1. 模板///
  2. 模板//

当然,如果您不想默认使用通用模板,则可以删除 SitePage 返回列表中的第二项。

© www.soinside.com 2019 - 2024. All rights reserved.