chore: initial commit of Wagtail backend scaffold
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
"""
|
||||
可复用的 StreamField Block 库。
|
||||
参见 documents/设计方案分析与完善版.md §2.6 组件清单。
|
||||
"""
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from wagtail import blocks
|
||||
from wagtail.images.blocks import ImageChooserBlock
|
||||
|
||||
|
||||
class CTAButtonBlock(blocks.StructBlock):
|
||||
text = blocks.CharBlock(max_length=50, label=_("按钮文案"))
|
||||
link = blocks.URLBlock(label=_("按钮链接"))
|
||||
|
||||
class Meta:
|
||||
icon = "link"
|
||||
label = _("按钮")
|
||||
|
||||
|
||||
class HeroBlock(blocks.StructBlock):
|
||||
title = blocks.CharBlock(max_length=120, label=_("标题"))
|
||||
subtitle = blocks.TextBlock(required=False, label=_("副标题"))
|
||||
background_image = ImageChooserBlock(required=False, label=_("背景图"))
|
||||
buttons = blocks.ListBlock(CTAButtonBlock(), label=_("按钮组"))
|
||||
|
||||
class Meta:
|
||||
icon = "image"
|
||||
label = _("首屏 Hero")
|
||||
template = "core/blocks/hero_block.html"
|
||||
|
||||
|
||||
class StatItemBlock(blocks.StructBlock):
|
||||
value = blocks.CharBlock(max_length=20, label=_("数值"))
|
||||
label = blocks.CharBlock(max_length=50, label=_("说明文字"))
|
||||
|
||||
|
||||
class StatsBlock(blocks.StructBlock):
|
||||
items = blocks.ListBlock(StatItemBlock(), label=_("数据项"))
|
||||
|
||||
class Meta:
|
||||
icon = "site"
|
||||
label = _("数据展示")
|
||||
template = "core/blocks/stats_block.html"
|
||||
|
||||
|
||||
class FeatureBlock(blocks.StructBlock):
|
||||
icon = blocks.CharBlock(max_length=50, required=False, label=_("图标"))
|
||||
title = blocks.CharBlock(max_length=100, label=_("标题"))
|
||||
description = blocks.TextBlock(label=_("描述"))
|
||||
|
||||
class Meta:
|
||||
icon = "pick"
|
||||
label = _("能力/优势")
|
||||
template = "core/blocks/feature_block.html"
|
||||
|
||||
|
||||
class FeatureGridBlock(blocks.StructBlock):
|
||||
heading = blocks.CharBlock(max_length=100, required=False, label=_("模块标题"))
|
||||
items = blocks.ListBlock(FeatureBlock(), label=_("能力列表"))
|
||||
|
||||
class Meta:
|
||||
icon = "grip"
|
||||
label = _("能力网格")
|
||||
|
||||
|
||||
class FAQItemBlock(blocks.StructBlock):
|
||||
question = blocks.CharBlock(max_length=200, label=_("问题"))
|
||||
answer = blocks.RichTextBlock(label=_("回答"))
|
||||
|
||||
|
||||
class FAQBlock(blocks.StructBlock):
|
||||
items = blocks.ListBlock(FAQItemBlock(), label=_("问答列表"))
|
||||
|
||||
class Meta:
|
||||
icon = "help"
|
||||
label = _("常见问题")
|
||||
template = "core/blocks/faq_block.html"
|
||||
|
||||
|
||||
class CTABlock(blocks.StructBlock):
|
||||
heading = blocks.CharBlock(max_length=120, label=_("标题"))
|
||||
description = blocks.TextBlock(required=False, label=_("描述"))
|
||||
button = CTAButtonBlock(label=_("按钮"))
|
||||
|
||||
class Meta:
|
||||
icon = "plus"
|
||||
label = _("行动号召 CTA")
|
||||
template = "core/blocks/cta_block.html"
|
||||
|
||||
|
||||
class LogoCloudBlock(blocks.StructBlock):
|
||||
heading = blocks.CharBlock(max_length=100, required=False, label=_("标题"))
|
||||
logos = blocks.ListBlock(ImageChooserBlock(), label=_("Logo 列表"))
|
||||
|
||||
class Meta:
|
||||
icon = "image"
|
||||
label = _("客户 Logo 墙")
|
||||
template = "core/blocks/logo_cloud_block.html"
|
||||
|
||||
|
||||
COMMON_BLOCKS = [
|
||||
("hero", HeroBlock()),
|
||||
("stats", StatsBlock()),
|
||||
("feature_grid", FeatureGridBlock()),
|
||||
("faq", FAQBlock()),
|
||||
("cta", CTABlock()),
|
||||
("logo_cloud", LogoCloudBlock()),
|
||||
("richtext", blocks.RichTextBlock(label=_("富文本"))),
|
||||
]
|
||||
Reference in New Issue
Block a user