django-ckeditor使用

2689 ワード

django-ckeditor
1インストールpip install ckeditor
2構成
  • INSTALLED_APPSに'ckeditor',を追加書き込みフィールドのフォーマット
  • を変更する.
  • トピック関連構成(settings)
    CKEDITOR_CONFIGS = {
        'default': {
            'toolbar': 'full',
            'height': 300,
            'width': 600,
            'tabSpaces': 4,
            'extraPlugins': 'codesnippet',   #       
        }
    }
  • 静的ファイル関連構成(ピクチャ)
    1 INSTALLED_APPS    
         'ckeditor_uploader',
    
    2     
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    
    CKEDITOR_UPLOAD_PATH = 'Article_media'
  • URLconfig
  • 導入パッケージ
  • from django.conf.urls import url,include
    from django.views.static import serve
  • urlpatterns
  • urlpatterns = [
         ...
        url(r'^ckeditor/', include('ckeditor_uploader.urls'),),
        url(r'^media/(?P.*)', 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