**참고 사이트**
https://docs.wagtail.io/en/stable/extending/rich_text_internals.html#rich-text-internals
https://github.com/wagtail/wagtail/issues/2695

**Issue**
RichEditor에서 Image나 file을 사용할 때 Wagtail 자체에서 embed tag로 변환해서 Database에 저장합니다. 

 

<embed embedtype="image" id="10" alt="A pied wagtail" format="left" />


Wagtail Template에서 |richtext가 바로 위 embed태그를 parse해주는 Template태그입니다. 다만 Api 전달할 때에는 그대로 embed 태그로 오기 때문에 이를 변환해서 Api에 사용할 수 있는 방법이 필요합니다. (이는 FrontEnd에서 v-html로 바로 변환해서 사용 해야 하기 때문에 그렇습니다.)

**해결**
그래서 전달되는 RichText의 Image를 원하는 형식에 맞게 바꾸고 이를 변환해서 API에 전달하는 방식에 대해서 고민하고 property를 사용해서 해결했습니다. 

 

handlers.py

from wagtail.core.rich_text import EmbedHandler
from wagtail.images.models import Image


class ImageHandler(EmbedHandler):
    identifier = 'image'

    @classmethod
    def expand_db_attributes(cls, attrs):
        image = Image.objects.get(pk=attrs['id'])
        image_url = image.file.name
        image_endpoint = "http://127.0.0.1:8000/media/" + image_url
        response_format = '<img class="richtext-%s" src="%s" alt="%s" />'
        return response_format % (
            attrs['format'],
            image_endpoint,
            attrs['alt'])

 

 

wagtail_hooks.py

from .handlers import ImageHandler

@hooks.register("register_rich_text_features", order=10)
def register_embed_handler(features):
    features.register_embed_type(ImageHandler)

 

 

models.py

from wagtail.core.rich_text import expand_db_html

@property
  def intro_api(self):
  	return expand_db_html(self.intro)

 

 

schema.py

intro_api: str

 

 

되는 코드인데 안된다고 생각되었을 경우 다른 곳에서 원인을 찾아보자!!

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

Wagtail Heroku Deploy  (0) 2022.03.01
DumpData  (0) 2022.01.08
2. Gunicorn, Nginx 적용  (0) 2021.12.23
1. PostgreSQL 적용  (0) 2021.12.22
3. Docker(Django, Wagtail)  (0) 2021.12.22

+ Recent posts