장고:썸머노트 설치: 두 판 사이의 차이

학교의 모든 지식. SMwiki
둘러보기로 이동 검색으로 이동
편집 요약 없음
63번째 줄: 63번째 줄:
         fields = ['title', 'content']
         fields = ['title', 'content']
         widgets = {'content': SummernoteWidget(),}
         widgets = {'content': SummernoteWidget(),}
</syntaxhighlight>폼까지 완성했으면 기존의 탬플릿이 잘 작동하나 확인해본다.
<nowiki>혹시나 {{</nowiki>
|-
|탬플릿 변경
|<nowiki>썸머노트로 입력한 내용은 html코드로 나온다. 탬플릿 필터 |safe 를 사용하여 detail.html의 콘텐츠 부분을 다음과 같이 수정한다.</nowiki><syntaxhighlight lang="html+django">
<div class="card-text" style="white-space: pre-line;">{{ question.content| safe  }}</div>
</syntaxhighlight>
</syntaxhighlight>
|-
|
|
|}
|}

2020년 11월 12일 (목) 20:29 판

장고! 웹 프레임워크! 틀:장고

  1. 장고:개요
  2. 장고:웹페이지설계
    1. 장고:앱
    2. 장고:url
    3. 장고:model
      1. 장고:DB
      2. 장고:모델 필드
      3. 장고:모델의 변경
    4. 장고:view
      1. 장고:클래스형 뷰, 제네릭 뷰
      2. 장고:view 각종 기능
    5. 장고:template
    6. 장고:static. 정적파일 사용하기
      1. 장고:CSS 사용하기
      2. 장고:JS 사용하기
      3. 장고:글꼴 사용
      4. 장고:부트스트랩
    7. 장고:media. 미디어 파일 사용하기
  3. 장고:관리자페이지
  4. 장고:settings.py
  5. 장고:기능구현
    1. 장고:회원관리
    2. 장고:유저
    3. 장고:커스텀 유저
    4. 장고:소셜로그인
    5. 장고:입력받기
    6. 장고:저장된 내용 활용하기
    7. 장고:변수 내보내기
    8. 장고:글쓰기
    9. 장고:페이징(페이지나누기)
    10. 장고:답변쓰기(댓글쓰기)
    11. 장고:추천,즐겨찾기
    12. 장고:새글(최신글) 나타내기
    13. 장고:썸머노트 설치
    14. 장고:네비게이션 바 만들기
    15. 장고:검색기능
    16. 장고:카테고리 만들기
    17. 장고:사진 올리기
    18. 장고:파일 업로드
    19. 장고:이메일app 만들기
    20. 장고:매직 그리드
  6. 장고:웹서비스
    1. 장고:Git
    2. 장고:리눅스에 올리기
    3. 장고:우분투에 올리기(nginx 사용)
    4. 장고:도커로 올리기
  7. 장고:팁

개요

일반적인 textarea에서 표현할 수 있는 방식은 굉장히 적다. 적어도 위키처럼 목차관리를 해준다든가, 링크를 만든다든가 정도는 되야 하지 않을까. 많이 사용되는 에디터인 섬머노트를 장고에 설치해본다.

이미 장고앱으로 개발되어 있어 쉽게 설치가 가능하다.

과정

과정 설명
pip install django-summernote 장고에서 사용하는 썸머노트를 설치.
settings.py의 APP 등록 'django_summernote', 추가
settings.py 설정 이미지 업로드를 위해

MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

추가

settings.py 설정 클릭재킹 방지설정 변경.

'django.middleware.clickjacking.XFrameOptionsMiddleware'라는 미들웨어가 클릭재킹을 방지해주는데, 기본설정이 DENY다.

때문에 아래 옵션을 주어 설정을 변경해준다.
#클릭재킹 방지설정 변경
X_FRAME_OPTIONS = 'SAMEORIGIN'

urls.py 변경 루트 urls.py에 다음의 코드를 추가한다.

path('summernote/', include('django_summernote.urls')),

모델 만들기 기존에 사용하던 모델이 있다면 굳이 만들 필요는 없겠다.
from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=10)
    content = models.TextField()

    def __str__(self):
        return self.title
폼 만들기 기존에 사용하던 폼이 있다면 내용을 추가해주면 된다.
from django import forms
from .models import Post

from django_summernote.widgets import SummernoteWidget

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'content']
        widgets = {'content': SummernoteWidget(),}
폼까지 완성했으면 기존의 탬플릿이 잘 작동하나 확인해본다.

혹시나 {{

탬플릿 변경 썸머노트로 입력한 내용은 html코드로 나온다. 탬플릿 필터 |safe 를 사용하여 detail.html의 콘텐츠 부분을 다음과 같이 수정한다.
<div class="card-text" style="white-space: pre-line;">{{ question.content| safe  }}</div>