코딩한걸음
article thumbnail
728x90
반응형

Today I Learned


어떤 문제가 있었는지

장고 프로젝트에서 <textarea>대신에 summernote를 써서 코드블록을 쓰고 싶었음

 


내가 시도해 본 것들 + 어떻게 해결 했는지

## console
pip install django-summernote

먼저 장고에서 지원하는 summernote 패키지를 설치

 

## main/settings.py
INSTALLED_APPS = [
    ...
    'django_summernote',
]

STATIC_URL = '/static/'

# Summernote를 위한 설정
# bs3이 코드블록이 젤 잘보였다
SUMMERNOTE_THEME = 'bs3'

settings.py에서 summernote를 인스톨했음을 장고에게 알려줌

 

## main/urls.py
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from django_summernote import urls as summernote_urls

urlpatterns = [
    path('summernote/', include('django_summernote.urls')),
]

# Summernote를 사용하기 위한 URL 패턴 추가
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urls.py에 summernote의 경로를 추가해주고 static 경로 지정

 

## app/forms.py
class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'post', 'photo', 'tags',]
        widgets = {
        'title': forms.TextInput(attrs={'class': 'form-control mt-2'}),
        'post': SummernoteWidget(attrs={'summernote': {'width': '100%', 'height': '400px'}}),
        'photo': forms.ClearableFileInput(attrs={'class': 'form-control mt-2'}),
        'tags' : forms.TextInput(attrs={'class': 'form-control mt-2', 'placeholder': '콤마(,)로 구분해주세요'}),
        }
        labels = {
            'title': '제목',
            'post': '내용',
            'photo': '사진',
            'tags': '태그',
        }

forms.py에 textarea대신 SummernoteWidget을 사용

 

 

{% extends 'base.html' %}
{% load static %}

{% block content %}
<div class="container">
    <h5 class="my-3 border-bottom pb-2">글 작성하기</h5>
    <form method="POST" class="post-form my-3" action="{% if update %}{% url 'post:post_update' post_id=post.id %}{% else %}{% url 'post:post_create' %}{% endif %}" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.media }}
        {{ form.as_p }}

        <div style="text-align: center">
            <button type="submit" class="button large next">{% if update %}수정{% else %}글 쓰기{% endif %}</button>
            <a href="{% url 'user:index' %}" class="button large next">취소</a>
        </div>
    </form>
</div>
<link href="{% static 'django_summernote/summernote-bs4.css' %}" rel="stylesheet">
<script src="{% static 'django_summernote/summernote-bs4.min.js' %}"></script>
<script>
    $(function() {
        $('#id_content').summernote();
    });
</script>

{% endblock %}

마지막으로 html에 form을 불러오면

 

이런식으로 summernote 편집기를 사용할 수 있다


무엇을 새롭게 배웠는지

장고에서 summernote 편집기를 쓰는 방법

 

 

728x90
반응형
profile

코딩한걸음

@Joonyeol_Yoon

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!