(2024.08.02. 수정됨.)
환경
OS : Windows 10
python : 3.10.11
Django : 5.0.7
주요 파일 경로
mysite/
|- config/
| |- urls.py
| |- settings/
| |- settings.py
|- board/
| |- models.py
|- templates/
|- detail.html
읽기 전에
이 글을 보고 따라하는 것이 목적이라면 이전 글을 먼저 읽고 동일한 환경을 갖춘 상태에서 시도하시길 바랍니다.
quill 에디터 사용해보기
https://quilljs.com/playground/snow에서 에디터를 사용해볼 수 있습니다.
django-quill 설치방법
django-quill 설치하기
"pip install django-quill-editor" 명령으로 패키지를 설치할 수 있습니다.
(django) C:\django\mysite>pip install django-quill-editor
Collecting django-quill-editor
Downloading django_quill_editor-0.1.40-py3-none-any.whl.metadata (4.5 kB)
Requirement already satisfied: django>=3.0 in c:\django\lib\site-packages (from django-quill-editor) (5.0.7)
Requirement already satisfied: asgiref<4,>=3.7.0 in c:\django\lib\site-packages (from django>=3.0->django-quill-editor) (3.8.1)
Requirement already satisfied: sqlparse>=0.3.1 in c:\django\lib\site-packages (from django>=3.0->django-quill-editor) (0.5.1)
Requirement already satisfied: tzdata in c:\django\lib\site-packages (from django>=3.0->django-quill-editor) (2024.1)
Requirement already satisfied: typing-extensions>=4 in c:\django\lib\site-packages (from asgiref<4,>=3.7.0->django>=3.0->django-quill-editor) (4.12.2)
Downloading django_quill_editor-0.1.40-py3-none-any.whl (32 kB)
Installing collected packages: django-quill-editor
Successfully installed django-quill-editor-0.1.40
(django) C:\django\mysite>p
app 추가하기
마이그레이션을 진행하기 위해 settings.py의 INSTALLED_APPS에 "django_quill"를 추가합니다.
# config/settings/settings.py
...
INSTALLED_APPS = [
'django_quill',
...
]
...
모델 변경하기
models.py의 content field를 "QuillField"로 변경합니다.
# board/models.py
from django.conf import settings
from django.db import models
from django.shortcuts import resolve_url
from django_quill.fields import QuillField # 추가
# 게시글 model
class Article(models.Model):
...
# content = models.TextField( # 내용 field
# verbose_name='내용',
# max_length=9999, # 최대 9999자
# blank=False, # 이 값은 반드시 입력되어야 함을 설정
# )
content = QuillField( # 내용 field
verbose_name='내용',
max_length=9999, # 최대 9999자
blank=False, # 이 값은 반드시 입력되어야 함을 설정
)
...
마이그레이션
모델이 변경되었기때문에 "python manage.py makemigrations"와 "python manage.py migrate"를 진행합니다.
(django) C:\django\mysite>python manage.py makemigrations
Migrations for 'board':
board\migrations\0002_alter_article_content.py
- Alter field content on article
(django) C:\django\mysite>python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, board, contenttypes, django_summernote, member, sessions
Running migrations:
Applying board.0002_alter_article_content... OK
(django) C:\django\mysite>
기존 데이터 변환하기
quill은 WYSIWYG 에디터지만, html이 아닌 독자적인 데이터 형식을 사용합니다.
에디터를 계속 사용하기 위해서는 "python manage.py convert_to_quill" 명령을 통해 기존에 작성한 데이터를 변환해주어야 합니다.
주의하세요. 데이터 형식이 바뀌기 때문에 작업 전 db를 백업해두는 것을 권장합니다.
# Usage: python manage.py convert_to_quill {app_name} {model_name} {field_name}
(django) C:\django\mysite> python manage.py convert_to_quill board Article content
collectstatic
django-summernote가 가지고 있는 static 파일을 사용하기 위해 "python manage.py collectstatic --settings=config.settings.prod" 명령을 입력합니다.
(django) C:\django\mysite>python manage.py collectstatic --settings=config.settings.prod
You have requested to collect static files at the destination
location as specified in your settings:
C:\django\mysite\static
This will overwrite existing files!
Are you sure you want to do this?
Type 'yes' to continue, or 'no' to cancel: yes
193 static files copied to 'C:\django\mysite\static'.
(django) C:\django\mysite>
템플릿 수정하기
"{{ object.content|safe }}"를 "{{ object.content.html|safe }}"으로 변경해줍니다.
# templates/detail.html
<div class="content">
{# 본문 내용 #}
{# "|safe" template filter를 적용하면 html을 escape하지 않는다. #}
{#{{ object.content|safe }}#}
{# quill editor로 작성한 내용 표시 #}
{{ object.content.html|safe }}
</div>
확인해보기
장고프로젝트를 실행한 다음, 글 작성 또는 편집 페이지를 확인하면 quill 에디터가 적용된 것을 확인할 수 있습니다.
에디터 툴바에 이미지 삽입 기능이 존재하지만, 이미지 업로드 관련 코드가 구현되어있지 않기 때문에 사진을 적용하더라도 브라우저 캐시 이미지만 삽입될 뿐, 이미지 파일이 저장되지는 않습니다.
이 글의 댓글 기능은 일부러 막아놓았습니다. 궁금한 내용이 있다면 게시판을 이용해주세요!