**참고 사이트**
- 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 |