django-ckeditor使用

django-ckeditor

1 安裝

pip install ckeditorpython

2 配置

  1. INSTALLED_APPS中添加django

    'ckeditor',ui

    修改寫入字段的格式url

  2. 主題相關配置(settings)插件

    CKEDITOR_CONFIGS = {
        'default': {
            'toolbar': 'full',
            'height': 300,
            'width': 600,
            'tabSpaces': 4,
            'extraPlugins': 'codesnippet',   # 配置代碼插件
        }
    }
  3. 靜態文件相關配置(圖片)code

    1 INSTALLED_APPS 中添加
    		'ckeditor_uploader',
      
    2 文件相關
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    
    CKEDITOR_UPLOAD_PATH = 'Article_media'
  4. URLconfigorm

    1. 引入包
    from django.conf.urls import url,include
    from django.views.static import serve
    1. urlpatterns
    urlpatterns = [
    		...
        url(r'^ckeditor/', include('ckeditor_uploader.urls'),),
        url(r'^media/(?P<path>.*)', serve, {"document_root": develop.MEDIA_ROOT}),
        ...
    ]
    
    或 
    
    urlpatterns = [
        ...
        url(r'^ckeditor/', include('ckeditor_uploader.urls'),),
        ...
    ] + static(settings.MEDIA_URL, documnets_root = settings.MEDIA_ROOT)

3 使用

1 通用的方式,能夠用在前臺頁面也能夠用在後臺管理頁面

# 重寫admin/Xadmin表單,在form添加裝飾,而不須要修改對象模型,須要重寫clean 方法,將表單拿到的數據替換成須要模型中真正存在的字段。
from ckeditor_uploader.widgets import CKEditorUploadingWidget
    
class ArticleAdminForm(forms.ModelForm):

    # 模型中並不存在 content_ck 只是在表單中存在, 將在clean 中 提換,將頁面數據和模型分離開 能夠作一些其餘操做
    content_ck = forms.CharField(widget=CKEditorUploadingWidget(), label='正文', required=False)
    
    # 模型中的真實字段
    content = forms.CharField(widget=forms.HiddenInput(), required=False)

    class Meta:
        model = Article
        fields = (
            'category', 'tag', 'desc', 'title',
            'editor_type', 'content', 'content_ck',
            'status'
        )

    def clean(self):
        content = self.cleaned_data.get('content_ck')
        if not content:
            self.add_error('content_ck', '必填項!')
            return
        self.cleaned_data['content'] = content
        return super().clean()

2 在Admin/Xadmin後臺使用

直接修改模型字段將所有的事情交給admin 雖然省事,不靈活也不利於後期開發維護對象

from ckeditor.fields import RichTextField

class Article(models.Model):
    title = models.CharField(max_length=254, unique=True)
    body = RichTextField()
    
    def __str__(self):
        return self.title
相關文章
相關標籤/搜索