Django에서 WYSIWYG 에디터 사용하기

웹 프로젝트를 진행하면서 어드민 페이지에 위지위그(WYSIWYG) 방식의 에디터가 필요로 해 리서치를 하던 중 손쉽게 세팅이 가능하고 django-storages, S3를 지원하는 라이브러리를 발견해 소개하고자 한다.

위지위그란?

이번에 사용한 위지위그 방식 리치 텍스트 에디터는 CKSource에서 개발한 CKEditor이고 Django에서 쓸 수 있도록 배포한 django-ckeditor 라이브러리를 사용하였다.

설치

필수 요소

pip install django-ckeditor
./manage.py collectstatic

파일 업로드 기능을 쓰기위한 필수 요소

# settings.py

CKEDITOR_UPLOAD_PATH = "uploads/"
# utils.py

def get_filename(filename):
    return filename.upper()
# settings.py

CKEDITOR_FILENAME_GENERATOR = 'utils.get_filename'
# urls.py

urlpatterns = [
    ...
    path('ckeditor/', include('ckeditor_uploader.urls')),
]

사용

필드

필드는 라이브러리가 제공하는 RichTextField()를 사용하면 된다. 정말 쉽다.

from django.db import models
from ckeditor.fields import RichTextField

class Event(models.Model):
    description = RichTextField()

업로드 기능이 들어간 에디터를 사용하고 싶다면 RichTextUploadingField()를 사용하면 된다.

위젯

필드를 사용하지 않고 Form 필드에 위젯을 적용시켜 사용할수도 있다. (예)

# admin.py

from django import forms
from django.contrib import admin
from ckeditor.widgets import CKEditorWidget

from .models import Event

class EventAdminForm(forms.ModelForm):
    description = forms.CharField(widget=CKEditorWidget())
    class Meta:
        model = Event

class EventAdmin(admin.ModelAdmin):
    form = EventAdminForm

admin.site.register(Event, EventAdmin)

S3

아래 줄을 추가해주지 않으면 django-storages를 통한 S3 사용이 불가하다.

# settings.py

AWS_QUERYSTRING_AUTH = False

Query String Authenticaton에 대해 간단히 설명하자면..

CKEditor

간단하게 Django Admin에 적용된 모습

기타

이 외에도 커스터마이징, allowedContent 사용, 특정 파일 업로드 제한 등 기능이 많다. 기능에 대한 상세한 설명은 django-ckeditor 문서에서 확인할 수 있다.