現在、ホームページをDjangoCMS"wagtail"を使用して開発中です。
今回の質問はadmin画面からサムネイルとテキストを選択、打ち込むとホームページ画面にカードを挿入できるようにしたいです。
そこでモデルを考えたのですが、うまくいきません。
blocks.pyで定義したカードを、home/models.pyでhome.htmlに組み込みたいです。
home/models.py内でtemplate = のように定義すると新しいページの追加になってしまいます。自分の希望としては現在あるhome.htmlの下部にカードを追加したいです
python
1#blocks.py 2#カードの内容を定義 3 4class CardBlock(blocks.StructBlock): 5 """Cards with image and text and button""" 6 card_image = ImageChooserBlock(required=True) 7 card_title = blocks.CharBlock(required=True, max_length=40) 8 card_text = blocks.TextBlock(required=True, max_length=200) 9 card_button_page = blocks.PageChooserBlock(required=False) 10 card_button_url = blocks.URLBlock(required=False,help_text="If the button page above is selected, that will be used first.") 11 12 class Meta: 13 template = "streams/card_index_block.html" 14 icon = "placeholder" 15 label = "latest Cards" 16
python
1 2#home/models.py 3class CardIndexPage(RoutablePageMixin, Page): 4 page = ParentalKey("home.HomePage", related_name="Card_images") 5 content = StreamField( 6 [ 7 ("card_block", blocks.CardBlock()), 8 ], 9 null=True, 10 blank=True, 11 ) 12 content_panels = Page.content_panels + [ 13 StreamFieldPanel("content"), 14 ] 15 16 def get_context(self, request, *args, **kwargs): 17 context = super().get_context(request, *args, **kwargs) 18 context["posts"] = CardIndexPage.objects.live().public() 19 return context
html
1<!--"streams/card_index_block.html"--> 2{% load wagtailcore_tags wagtailimages_tags %} 3 4<div class="container"> 5 <div class="card-deck"> 6 {% for card in self.cards %} 7 {% image self.card_image fill-900x400 as img %} 8 <div class="card"> 9 10 <div class="card-body"> 11 <h5 class="card-title">{{ self.card_title }}</h5> 12 <p class="card-text">{{ self.card_text }}</p> 13 {% if card.button_page%} 14 <a href="{{ blocks.card_button_page.url }}" class= "btn btn-primary"> 15 Read More (internal) 16 </a> 17 {% elif blocks.card_button_url %} 18 <a href="{{ card.button_url }}" class= "btn btn-primary"> 19 Read More (external) 20 </a> 21 {% endif %} 22 </div> 23 </div> 24 {% endfor %} 25 </div> 26</div> 27 28</hr>
あなたの回答
tips
プレビュー