- 전체
- Python 일반
- Python 수학
- Python 그래픽
- Python 자료구조
- Python 인공지능
- Python 인터넷
- Python SAGE
- wxPython
- TkInter
- iPython
- wxPython
- pyQT
- Jython
- django
- flask
- blender python scripting
- python for minecraft
- Python 데이터 분석
- Python RPA
- cython
- PyCharm
- pySide
- kivy (python)
django Django 장고 텍스트에디터 사용하기(CKeditor)
2020.11.22 00:23
Django 장고 텍스트에디터 사용하기(CKeditor)
기존의 Textarea가 아닌 TextEditor 를 통해서 글을 보다 편리하게 작성하고 활용할 수 있다
링크 : https://github.com/django-ckeditor/django-ckeditor
준비물 먼저
1. FORM 태그를 활용한 템플릿
2. static, media 태그
먼저 ckeditor 라이브러리를 설치해준다.
|
1
|
$ pip install django-ckeditor
|
cs |
그 다음, App을 연결해준다.
|
1
2
3
4
5
6
|
# settings.py
INSTALLED_APPS = [
...
'ckeditor',
'ckeditor_uploader',
]
|
cs |
그리고 ckeditor path를 설정해준다.
|
1
2
3
|
# settings.py
CKEDITOR_UPLOAD_PATH = 'uploads/'
CKEDITOR_IMAGE_BACKEND = "pillow"
|
cs |
그리고 url을 지정해준다.
|
1
2
3
4
5
6
|
# project/blogproject/urls.py
...
urlpatterns = [
...
path('ckeditor/', include('ckeditor_uploader.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
cs |
다음, Model의 field를 변경해준다.
|
1
2
3
4
5
6
7
8
9
10
|
# project/blog/models.py
from ckeditor_uploader.fields import RichTextUploadingField
# Create your models here.
class Blog(models.Model):
title = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
description = RichTextUploadingField(blank=True,null=True)
body = models.TextField()
# username = models.CharField(max_length=50)
|
cs |
forms.py 변경해주기!!
그리고 migrate를 해준다.
|
1
2
|
$ python manage.py makemigrations
$ python manage.py migrate
|
cs |
그리고 template를 변경해준다.
|
1
2
3
4
5
6
7
8
9
10
|
# project/blog/templates/new.html
<div class = "container">
<form method ="POST">
{% csrf_token %}
{{form.media}}
{{form.as_p}}
<br>
<input class="btn btn dark" type="submit" value="제출하기">
</form>
</div>
|
cs |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# project/blog/templates/detail.html
{% extends 'base.html' %}
{% block content %}
<div class="conatiner">
<h1> {{blog.title}} </h1>
<p> {{blog.pub_date}} </p>
<p> {{blog.body}} </p>
<p>{{blog.description|safe}}</p>
<br><br>
</div>
<a href="{%url 'home'%}">HOME</a>
{% endblock%}
|
cs |
그렇게 되면 다음과 같이 에디터가 잘 나타난다.

사용 중에 이미지 업로드 시 파일을 선택하고 send it to server를 눌러줘야
이미지 파일이 서버에 올라가고 잘 동작한다!
### 추가적으로 ckeditor에서는 파일 업로드에 대해 기본적으로 admin 계정을 요구하도록 옵션이 설정되어있다.
방법1)
다음과 같이 staff_member_required가 되어있는 옵션을 지워준다.
그렇게 되면 일반 계정에서도 업로드가 잘 이루어진다
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# myvenv\Lib\site-packages\ckeditor_uploader\urls.py
...
if django.VERSION >= (1, 8):
urlpatterns = [
url(r'^upload/', staff_member_required(views.upload), name='ckeditor_upload'),
url(r'^browse/', never_cache(staff_member_required(views.browse)), name='ckeditor_browse'),
]
else:
from django.conf.urls import patterns
urlpatterns = patterns(
'',
url(r'^upload/', staff_member_required(views.upload), name='ckeditor_upload'),
url(r'^browse/', never_cache(staff_member_required(views.browse)), name='ckeditor_browse'),
)
|
cs |
|
1
2
3
4
5
6
|
# myvenv\Lib\site-packages\ckeditor_uploader\urls.py
...
urlpatterns = [
url(r'^upload/', views.upload, name='ckeditor_upload'),
url(r'^browse/', never_cache(views.browse), name='ckeditor_browse'),
]
|
cs |
방법2) 아니면 url을 include 해주지 않고 직접 url을 작성해주면 된다.
|
1
2
3
4
5
6
7
8
9
10
11
12
|
# project/project/urls.py
from django.contrib.auth.decorators import login_required
from ckeditor_uploader import views as views_ckeditor
from django.views.decorators.cache import never_cache
urlpatterns = [
...
path(r’^upload/’, login_required(views_ckeditor.upload), name=’ckeditor_upload’),
path(r’^browse/’, never_cache(login_required(views_ckeditor.browse)), name=’ckeditor_browse’),
...
]
|
cs |
# 수정하기
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# project/blog/views.py
...
def blogedit(request, blog_id):
# 객체 가져오기
blog = get_object_or_404(Blog, pk=blog_id)
# 유저 다르면 돌려보내기
# if blog.username != request.user.username:
# return redirect('home')
# 입력된 내용 처리 -> POST
if request.method == 'POST':
form = BlogPost(request.POST or None, instance=blog)
if form.is_valid(): # 잘입력된지 체크
post = form.save(commit=False)
post.save() # 저장하기
return redirect('/blog/'+str(blog.id))
# 빈 페이지 띄워주는 기능 -> GET
else :
form = BlogPost(instance=blog)
return render(request, 'edit.html', {'blog':blog,'form':form})
|
cs |
|
1
2
3
|
# project/blog/views.py
...
path('blig/editBlog/<int:blog_id>', blog.views.blogedit, name="editblog"),
|
cs |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# project/blog/templates/eidt.html
...
{% extends "base.html" %}
{% block content %}
{% load static %}
<form action="{% url 'editblog' blog.id%}" method="POST">
{% csrf_token %}
{{form.media}}
{{form.as_p}}
<br>
<input class="btn btn dark" type="submit" value="제출하기">
</form>
</form>
{% endblock content %}
|
cs |
# 업로드 시 파일 이름 수정하기
project/utils.py 파일생성
settings.py에 다음의 코드 추가
[출처] https://woongsin94.tistory.com/102
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 10 |
[Kivy (python)] Kivy에서 Hello World
| 졸리운_곰 | 2024.12.20 | 358 |
| 9 |
[Kivy (python)] Kivy 시작하기 1 (1.11.1 버전 - 설치하기)
| 졸리운_곰 | 2024.12.20 | 401 |
| 8 | [Kivy (python)] Kivy 앱 배포: Android APK 생성하기 | 졸리운_곰 | 2024.12.20 | 347 |
| 7 |
[kivy (python)] [Python] 파이썬 키비(kivy) 앱 개발 - Screen Manager
| 졸리운_곰 | 2024.12.20 | 509 |
| 6 |
[kivy (python)] [Python] 파이썬 키비(kivy) 앱 개발 - 머티리얼 디자인, KivyMD
| 졸리운_곰 | 2024.12.20 | 392 |
| 5 |
[kivy (python)] [Python] 파이썬 키비(kivy) 앱 개발 - 레이아웃 개요와 입력창
| 졸리운_곰 | 2024.12.20 | 495 |
| 4 |
[kivy (python)] [Python] 파이썬 키비(Kivy) buildozer로 APK 앱 빌드 in Linux
| 졸리운_곰 | 2024.12.20 | 383 |
| 3 |
[kivy (python)] [Python] 파이썬 키비(kivy) 앱 개발 - 설치와 예제 앱 분석
| 졸리운_곰 | 2024.12.20 | 427 |
| 2 |
[kivy (python)] [Python] 파이썬 키비(kivy) 앱 개발 - kv 파일과 한글 폰트
| 졸리운_곰 | 2024.12.20 | 385 |
| 1 |
[kivy (python)] <재정리> 파이썬 키비(Kivy) buildozer로 APK 앱 완벽 변환하기 in Linux Ubuntu, 변환 환경 제공!
| 졸리운_곰 | 2024.12.20 | 598 |

