게시판에 어떠한 기능을 추가해볼까 고민하던 중, 글을 쓸 때 글의 작성부분이 밋밋한 점이 마음에 들지 않았다. 직접 구현하기에는 너무 어려울것 같아 구글링을 해보니, Summernote라는 에디터를 사용하면 된다고 하더라. 사용법을 찾아보니 쉬운것 같아 공유해보고자 한다.

출처 : https://summernote.org/getting-started/#include-jscss

1. HTML 헤더


  • Bootstrap으로 구현된 에디터이다 보니, HTML 헤더가 필요하다.
    <!DOCTYPE html>
    <html lang="en">
    ...
    </html>

2. 필요한 파일 추가


<!-- include libraries(jQuery, bootstrap) -->
<link href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>

<!-- include summernote css/js -->
<link href="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote.min.js"></script>    

3. 에디터 불러오기


  • 에디터를 적용할 textarea 만들기
    <textarea class="form-control" name="content" id="content" rows="10">{{ form.content.value|default_if_none:'' }}</textarea>
  • 해당 textarea에 summernote 적용
    <script type="text/javascript"> 
      $(document).ready(function() { $("#content").summernote(); }) 
    </script>

4. Django에서 불러오는 부분 처리


  • Django에서 HTML 텍스트를 그대로 불러올 수 없음.
  • 템플릿 필터중에 safe 필터를 사용
    • 보안상에 문제가 있을수도 있으니 신중히 사용해야 함.
    • 악성 스크립트 삽입 공격에 대한 고려가 필요함.
      • 다행히도 Summernote 에디터에서는 입력한 데이터에 대해서는 이스케이프가 적용되서 HTML 태그를 생성하므로 safe 필터를 사용해도 문제가 없을 것이라고 생각된다.
    • 이스케이프가 적용되지 않음, 기본적으로는 이스케이프 적용 => HTML 태그를 적용.
<div class="card-text" style="white-space: pre-line;">
  {{ question.content|safe}}
</div>

이스케이프 적용 / 미적용 차이점


  • 이스케이프가 적용되지 않음
    <b>
  • 이스케이프가 적용됨
    &lt;b&gt;

'프레임워크 > Django' 카테고리의 다른 글

[ Django ] Choice  (0) 2021.09.15
[ Django ] MySQL 연동  (0) 2021.09.14
[Django] Rest API 및 Ajax  (0) 2021.07.25
[Django] Django 설치  (0) 2021.07.16
[Django] pyenv  (0) 2021.07.16

+ Recent posts