【问题标题】:Wagtail Fields / Data for Every Page?每一页的鹡鸰字段/数据?
【发布时间】:2018-05-28 20:35:37
【问题描述】:

在 wagtail 中,有没有一种为每个页面模型添加相同字段的好方法?我正在考虑几乎每个页面都希望实现的 SEO 数据字段和搜索元信息之类的东西。我似乎找不到使用 Wagtail 的好方法。

【问题讨论】:

    标签: wagtail


    【解决方案1】:

    为此,您可以使用抽象类(然后从这个基类继承而不是 Wagtail 的 Page)或 mixins(然后从 mixin 和 Wagtail 的 Page 继承)。

    # Example with Abstract class
    class BasePage(wagtail.wagtailcore.models.Page):
        seo_image = models.ForeignKey(...)
    
        class Meta:
            abstract = True
    
    
    class MyPage(BasePage):
        pass
    
    
    # Example with mixins
    class SEOMixin(django.db.models.Model):
        seo_image = models.ForeignKey(...)
    
        class Meta:
            abstract = True
    
    class MyPage(SEOMixin, wagtail.wagtailcore.models.Page):
        pass
    

    使用抽象类可能是最简单的,但您的所有页面将始终继承基类中定义的所有字段。 另一方面,使用 mixins 更灵活,因为您可以拥有多个 mixin(SEOMixin、ThumbnailMixin 等)并根据您的需要组合它们。

    【讨论】:

    • 是的。我想过这种方法。对于现有项目来说似乎有点紧张。不过这不是一个糟糕的主意。
    • 好的。是的,使用 Mixins 是迄今为止我测试过的最好的方法。谢谢洛伊克·特谢拉。您的回答有点令人困惑,因为 python 中的 Mixins 文档记录很差。 Loïc Teixeira 的 SEOMixin 类,虽然它看起来像一个抽象类,但在 Django 世界中,实际上是一个 Mixin。这是一个很好的资源,用于介绍如何将 Mixin 与 Django 模型一起使用,stackoverflow.com/questions/3254436/…
    • 确实,Django 的 mixin 与纯 Python 的 mixin 有点不同。这是一个很棒的链接,我会确保在将来谈论 Django mixin 时包含它。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多