wagtail의 이미지 처리에 대해서 공부해보려고 한다.

 

models.py

class CardPage(Page):
    date = models.DateField("Card date")
    intro = models.CharField(max_length=250)
    body = RichTextField(blank=True)
    categories = ParentalManyToManyField('card.CardCategory', blank=True)

    # ... (Keep the main_image method and search_fields definition)

    def main_image(self):
        gallery_item = self.gallery_images.first()
        if gallery_item:
            return gallery_item.image
        else:
            return None

    content_panels = Page.content_panels + [
        MultiFieldPanel([
            FieldPanel('date'),
            FieldPanel('categories', widget=forms.CheckboxSelectMultiple),
        ], heading="Card information"),
        FieldPanel('intro'),
        FieldPanel('body'),
        InlinePanel('gallery_images', label="Gallery images"),
    ]


class CardPageGalleryImage(Orderable):
    page = ParentalKey(CardPage, on_delete=models.CASCADE, related_name='gallery_images')
    image = models.ForeignKey(
        'wagtailimages.Image', on_delete=models.CASCADE, related_name='+'
    )
    caption = models.CharField(blank=True, max_length=250)

    panels = [
        ImageChooserPanel('image'),
        FieldPanel('caption'),
    ]

위와 같은 Model이 있다고 해보자. CardPageGalleryImage는 Orderable로 CardPage에서 여러개를 추가할 수 있는 Clusterable 모델이다. 

 

def main_image에서는 여러개의 갤러리 이미지 중, 첫번 째 이미지만 가져와서 return 해준다. 

 

 

card_index_page.html

{% load wagtailimages_tags %}

<div class="container pt-3 pb-3">
                <div class="card" style="width: 18rem; text-align: center;">
                    {% image card.main_image width-400 as tmp_photo %}
                    <img src="{{ tmp_photo.url }}" width="{{ tmp_photo.width }}" height="{{ tmp_photo.height }}" alt="{{ tmp_photo.alt }}" class="my-custom-class" />
                </div>
            {% endwith %}
        {% endfor %}
    </div>

간단하게 image를 어떻게 template에서 표현하는지 살펴보자.

Wagtail에서는 template에 image를 사용할 때 {% load wagtailimages_tags %}를 상단에 추가해줘야한다. 

그리고 {% image [image] [resize-rule] as '줄임말' %} 형식으로 작성한다. 

'Back-End > Wagtail, Django' 카테고리의 다른 글

Wagtail demo site (breads)  (0) 2021.08.17
Wagtail demo site (blog)  (0) 2021.08.17
Wagtail demo site (base)  (0) 2021.08.15
Wagtail StreamField  (0) 2021.08.11
Wagtail tutorial (튜토리얼)  (0) 2021.08.11

+ Recent posts