sites
フレームワークを利用し、それぞれのホームページとして単一のページを持つセキレイプロジェクトがありますsite
。これらのホームページには (必然的に) 子ページは必要ありません。それらのコンテンツは、さまざまな streamfield から構築されていStructBlock
ます。
これらStructBlock
の のそれぞれには、個別のフィールド セットがありますが、共通のフィールドもあります (例: show_in_navigation
)。
show_in_navigation
BooleanBlock
for eachを繰り返さないようにするために、共通フィールドを使用してStructBlock
を作成し、これを特定のブロック用にサブクラス化しました。BaseStructBlock
# models.py
class Homepage(Page):
body = StreamField(
BaseStreamBlock(),
)
content_panels = Page.content_panels + [
StreamFieldPanel('body'),
]
# blocks.py
class BaseStructBlock(StructBlock):
show_in_navigation = BooleanBlock()
class BaseStructBlock(StructBlock):
show_in_navigation = BooleanBlock()
def get_form_context(self, value, prefix='', errors=None):
context = super(BaseStructBlock, self).get_form_context(
value, prefix=prefix, errors=errors
)
# reverse order of fields in OrderedDict, so that the fields from
# BaseStructBlock appear after the specific fields
context['children'] = collections.OrderedDict(
reversed(list(context['children'].items()))
)
return context
class Meta:
abstract = True
class FooBlock(BaseStructBlock):
# field definitions
class BarBlock(BaseStructBlock):
# field definitions
class BaseStreamBlock(StreamBlock):
foo_block = FooBlock()
bar_block = BarBlock()
それは機能します-show_in_navigation
継承するすべてのブロックで取得しますBaseStructBlock
-しかし、これらのフィールドの編集インターフェイスをカスタマイズしたいと思います:
現時点ではの下に表示したい- 解決済み、更新を参照してくださいBaseStructBlock
、サブクラス化されたブロックのフィールドの上にすべてのフィールドが表示されます -特定のフィールドBaseStructBlock
- これらのクールなパネルのカスタマイズをすべて使用して
edit_handlers
、すべての共通フィールドを作成できれば幸いcollapsible
です。
これは可能ですか?すべてのヒントは大歓迎です。
PS: ドキュメント セクション の StructBlockのカスタム編集インターフェイスに気付きましたが、これが私のニーズをどのように解決できるかわかりません...
PPS: このプロジェクト:
- ジャンゴ (2.0.1)
- セキレイ (2.0b1)