iT邦幫忙

0

Django-ckeditor RichTextField欄位的內文儲存失敗

  • 分享至 

  • xImage

在Django環境下設置網頁
我嘗試自行設置CKEditor,它在推送到HEROKU上時運作良好,
本來前面在localhost上測試也沒什麼大問題,
卻突然發現所有RichTextField的欄位都無法在localhost上存進資料庫!!
(因為發現此錯誤,導致我還不敢推到Heroku上)

在前端的發表文章,標題、發表日期、作者欄位,都好好存入,
只有作為RichTextField的content欄位儲存失敗
就算試圖在管理後臺編輯,送出後仍無法保存/images/emoticon/emoticon14.gif

經歷無數次對文章Object在Models上的修改嘗試,
搞了數小時才發現使用到ckeditor的另一頁面也有問題,確定是Ckeditor設定出錯。
直接將Heroku上成功運行的版本拉下來執行,但問題依舊

想請各位大大解答一下問題在哪裡/images/emoticon/emoticon20.gif

在前端與Admin上可以正常顯示,如下:
後台admin
前端website
但一旦按下送出,內容是不會被保存的!
這導致我在submit後,new Post成功被創建,但content為空導致該文章頁無法存取的問題,
故我只好在model.py中強行加入default=""以避免打不開文章頁面
更重要的是我的文章內容完全不能動了啊現在QAQ

ckeditor的路徑:BASE_DIR\static\ckeditor\ckeditor\ckeditor.js
P.S.:
我並不執行python managy.py collectstatic,
而是直接將ckeditor放入static資料夾下

base.html

<head>
{% load static %}
<script     src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}"><!-- Bootstrap CSS-->
    <script src="{% static 'js/bootstrap.min.js' %}"></script>
    <script src="{% static 'js/bootstrap.bundle.min.js' %}"></script>
    <script>window.CKEDITOR_BASEPATH = "{% static 'ckeditor/ckeditor/' %}";</script>
    <script src="{% static 'ckeditor/ckeditor/plugins/prism/lib/prism/prism_patched.min.js' %}"></script><!-- prism -->
    <link rel="stylesheet" href="{% static 'css/prism.css' %}">
   <script src="{% static 'js/ckeditor.js' %}"></script> <!--CKEditor CSS-->
</head>

Settings.py

INSTALLED_APPS = [
    ...
    'ckeditor', #富文本編輯器
]

STATIC_URL = '/static/' 
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
) 
#本機開發時的CSS樣式或JS資料.IMG等檔案
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') 
#collectstatic將收集靜態檔案至此
django_heroku.settings(locals())

CKEDITOR_CONFIGS = {
    'default': {
        'skin' : 'moono-lisa',
        'height': 400,
        'enterMode': 2, # CKEDITOR.ENTER_BR
        'toolbar': 'Custom',# 工具數量Custom
        'toolbarCanCollapse': True, 
        'tabSpaces': 4,
        'removePlugins': 'stylesheetparser',
        'allowedContent': True,
        'toolbar_Basic': [
            ['Source', '-', 'Bold', 'Italic']
        ],
        'extraPlugins': ','.join([ #額外插件
            'uploadimage', 
            'uploadwidget','filetools', 
            'autolink','autoembed','Youtube' 
            'embed', 'embedbase','embedsemantic', 
            #'find', 'copyformatting', 
            'codesnippet', 'codesnippetgeshi','Prism', 
        ]),
        'toolbar_Custom': [
            ['Bold','Italic','Underline','Strike','Blockquote','-','Preview', 'Templates','RemoveFormat' ],
            [ 'Link','Unlink','Anchor'],['FontSize','TextColor','BGColor'],['Outdent','Indent'],
            [ 'Image','Youtube','Iframe','Table','HorizontalRule','SpecialChar','Smiley'],'/',
            ['Cut', 'Copy', 'Paste', 'PasteText', 'copyformatting','selectall', '-', 'Undo', 'Redo'],['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],['-','BulletedList','NumberedList','-'],
            ['CreateDiv', 'Checkbox', 'Radio', 'Textarea', 'Select', 'Button', 'ImageButton'],
            [ 'CodeSnippet','Youtube'],['Maximize','ShowBlocks','Source',],
            ['codesnippet', 'codesnippetgeshi','find', 'clipboard','codesnippet']
        ],
    }, 
}

models.py

class Post(models.Model):
    title = models.CharField(max_length=32)
    body = RichTextField(blank=True,default="")
    pub_date = models.DateTimeField(default=timezone.now)
    tag = models.CharField(max_length=32, blank=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='post',default="1")

    class Meta:
        ordering = ('-id',)

    def __str__(self):
        return self.title

views.py(這大概無關,因為後臺也有問題)

def edit(request,id): #編輯文章
	post = Post.objects.get(id=id)
	form = PostForm(instance=post)
	if request.method == 'POST':
		form = PostForm(request.POST, instance=post)
		if form.is_valid():
			form.save()
		return redirect('/articles/show/'+str(id)) #修改成功回文章
	context = {
		'form': form
	}
	return render(request, "articles/edit.html", locals())

form.py(這大概無關,因為後臺也有問題)

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields =['title', 'body','tag']
        widgets = {
            'title':forms.TextInput(attrs={'class': 'form-control'}),
            'body':forms.TextInput(attrs={'class': 'form-control'}),
            'tag':forms.TextInput(attrs={'class': 'form-control'})
            }
        labels = {
            'title': '文章標題',
            'body':'文章內容',
            'tag': '文章分類',
        }

我修改了一下ckediotor資料夾底下的config.js,突然可以儲存了

原以為已經解決,但這問題到了04/05又發生了一次,明明整個ckeditor資料夾都沒動到,
只是上傳一篇文章,從此就不能編輯文章內容了

nj iT邦新手 5 級 ‧ 2022-04-06 09:11:35 檢舉
Django-ckeditor版本?我目前是用6.2.0
另外,可以看看F12有沒有錯誤訊息
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答