Chapter 7-1 Django 블로그 이미지 업로드 기능 만들기

2025. 5. 11. 22:11·Django

🌟 Chapter 07. Django 블로그 이미지 업로드 기능 만들기

Summernote 기반 Rich Text Editor 통합 및 이미지 업로드 처리 방법


✅ 1. Rich Text Editor란?

🎨 리치 텍스트 편집기(Rich Text Editor) 는 사용자가 일반 텍스트뿐만 아니라
굵게, 기울임, 이미지 삽입, 글머리기호 등 다양한 서식을 직접 적용할 수 있게 도와주는 도구입니다.

  • 대표 예시: Summernote, TinyMCE, CKEditor
  • HTML/CSS 기반 시각 편집 제공

🔗 공식 사이트: https://summernote.org/


🛠️ 2. Summernote 설치 및 설정

📦 1) 패키지 설치

poetry add django-summernote

📌 Poetry로 django-summernote 패키지를 설치하면, 프로젝트에 Summernote 기능이 추가됩니다.


⚙️ 2) settings.py 설정

# config/settings.py

INSTALLED_APPS = DJANGO_APPS + OWN_APPS + [
    'django_extensions',
    'django_summernote',  # ✅ Summernote 추가
]

# 미디어 파일 설정
MEDIA_URL = 'media/'
MEDIA_ROOT = BASE_DIR / 'media'

# 정적 파일 설정
STATIC_URL = 'static/'
STATICFILES_DIRS = [ BASE_DIR / 'static' ]
STATIC_ROOT = BASE_DIR / '.static_root'

📌 INSTALLED_APPS에 django_summernote를 추가하고, MEDIA 및 STATIC 경로도 설정해야 이미지 업로드가 제대로 작동합니다.

 

Migrate 해주기 

python manage.py migrate

🌐 3) urls.py 설정

# config/urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
    path('fb/', include('blog.fbv_urls')),
    path('accounts/', include("django.contrib.auth.urls")),
    path('signup/', member_views.sign_up, name='signup'),
    path('login/', member_views.login, name='login'),

    # ✅ Summernote URL 등록
    path('summernote/', include('django_summernote.urls')),
]

# ✅ DEBUG일 때 미디어 파일 서빙
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

📌 Summernote 관련 URL 경로를 추가하고, DEBUG 모드일 때는 업로드된 이미지 파일도 서빙할 수 있도록 설정합니다.


👨‍💼 3. 관리자 페이지 적용

📝 admin.py 설정

from django.contrib import admin
from django_summernote.admin import SummernoteModelAdmin
from blog.models import Blog, Comment

class CommentInline(admin.TabularInline):
    model = Comment
    extra = 1

@admin.register(Blog)
class BlogAdmin(SummernoteModelAdmin):
    summernote_fields = ['content']  # ✅ Summernote 적용 필드
    inlines = [CommentInline]

📌 SummernoteModelAdmin을 상속하면 해당 필드에 Summernote 위지윅 에디터가 적용됩니다.
📌 inlines를 통해 댓글(Comment)을 블로그 편집 페이지에서 함께 관리할 수 있도록 구성합니다.


⚙️ 4. 마이그레이션 및 서버 실행

python manage.py migrate
python manage.py runserver

📌 Summernote 관련 DB 마이그레이션을 수행하고 서버를 실행합니다.

  • Admin에서 블로그 글 수정 시 Summernote 에디터로 전환된 화면을 확인할 수 있습니다.

🖼️ 5. 이미지 출력 설정

📄 blog_detail.html 수정

<p>{{ blog.content | safe }}</p>  <!-- HTML 태그 렌더링 허용 -->

📌 Summernote는 이미지나 HTML 태그를 포함하므로 | safe 필터를 통해 HTML이 실제로 렌더링되도록 설정해야 합니다.


📸 미리보기

이미지 테스트용 샘플:
👉 https://picsum.photos/


🧠 마무리 요약

항목 설명

설치 패키지 django-summernote
설정 파일 INSTALLED_APPS, MEDIA_ROOT, MEDIA_URL, urls.py
적용 위치 관리자 페이지 에디터, 상세 페이지 출력
주의 사항 `blog.content

필요하다면 사용자 글 작성 폼에도 Summernote 적용이 가능합니다.
원하시면 CBV/FBS용 폼 적용 예제도 정리해드릴게요.

'Django' 카테고리의 다른 글

Chapter 7-3 Django Summernote iframe 메시 구성와 'codeview' 설정의 의의  (0) 2025.05.11
Chapter 7-2 Django 블로그 글 작성/수정 폼에 Summernote 적용하기  (0) 2025.05.11
Chapter 6-5 댓글 페이지네이션 구현하기 (ListView + Bootstrap)  (0) 2025.05.09
Chapter 6-4 Django 블로그에 댓글 기능 추가하기  (0) 2025.05.09
Chapter 6-3 댓글 기능 시작하기 - 모델과 관리자 설정  (0) 2025.05.09
'Django' 카테고리의 다른 글
  • Chapter 7-3 Django Summernote iframe 메시 구성와 'codeview' 설정의 의의
  • Chapter 7-2 Django 블로그 글 작성/수정 폼에 Summernote 적용하기
  • Chapter 6-5 댓글 페이지네이션 구현하기 (ListView + Bootstrap)
  • Chapter 6-4 Django 블로그에 댓글 기능 추가하기
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (798)
      • Python (32)
      • 프로젝트 (113)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (154)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    뷔
    global politics
    btsreunion
    self-growth
    americanlaw
    basalcellcarcinoma
    youngprofessionals
    smartphonedurability
    life reflection
    chinanightlife
    hotcoffeecase
    RM
    newpoliticalparty
    remittance
    trumpmuskclash
    btsjungkook
    americaparty
    lawsuitculture
    titaniumcase
    chatgpterror
    homebartrend
    college reunions
    urbantrends
    travel ban
    classaction
    gpterror
    livebroadcast
    btsdischarge
    bts
    btscomeback
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Chapter 7-1 Django 블로그 이미지 업로드 기능 만들기
상단으로

티스토리툴바