Django配置-KindEditor


KindEditor

  • 官方文档:点击 
  • 具体使用方法:点击
  • 详细参数:点击
  • 下载:点击

一、文件夹说明

├── asp                          asp示例,删掉
├── asp.net                    asp.net示例,删掉
├── attached                  空文件夹,放置关联文件attached
├── examples                 HTML示例,删掉
├── jsp                          java示例,删掉
├── kindeditor-all-min.js 全部JS(压缩)
├── kindeditor-all.js        全部JS(未压缩)
├── kindeditor-min.js      仅KindEditor JS(压缩)
├── kindeditor.js            仅KindEditor JS(未压缩)
├── lang                        支持语言
├── license.txt               License
├── php                        PHP示例,删掉
├── plugins                    KindEditor内部使用的插件
└── themes                   KindEditor主题

二、实例

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 # 配置文件: # 与用户上传相关的配置 MEDIA_ROOT= os.path.join(BASE_DIR, "media") MEDIA_URL = "/media/"   # 路由中: from django.urls import path, re_path from django.views.static import serve from django.conf import settings from app01 import views   urlpatterns = [     # media配置:     re_path(r"media/(?P.*)$", serve, {"document_root": settings.MEDIA_ROOT}),     # 文本编辑器上传图片url     path('ke_upload/', views.ke_upload), ]   # 模板中: """
          {{ form.content }} {{ form.content.errors.0 }}
  {% block js %} {% endblock %}   """   # 视图中: from django.shortcuts import render, redirect, HttpResponse import os import time import json     def ke_upload(request):     file_obj = request.FILES.get('imgFile'# 通过filePostName修改     # 上传后面的参数kd用的是dir     # upload_img.html?dir=image  说明是图片     # upload_img.html?dir=media  说明是视频,     file_type = request.GET.get('dir')     file_obj.name = "%s%s" % (time.time(), file_obj.name)     file_dir = 'media%s%s' % (os.sep, file_type)     if not os.path.exists(file_dir):         os.makedirs(file_dir)     file_path = os.path.join("media", file_type, file_obj.name)     with open(file_path, 'wb') as f:         for line in file_obj:             f.write(line)       dic = {         'error': 0,         'url': '/media/%s/%s' % (file_type, file_obj.name),         'message': '错误了...'     }     return HttpResponse(json.dumps(dic))

三、补充

用kindeditor上传的flash和视频播放不了,打开编辑器的源码把type属性去掉就可以播放了

四、django-ckeditor

1.下载 

pip install django-ckeditor

2.注册和配置

```
INSTALLED_APPS = [
    
    'ckeditor',
    'ckeditor_uploader',
]

CKEDITOR_UPLOAD_PATH = "ckeditor/"   #是和media结合使用的

MEDIA_ROOT= os.path.join(BASE_DIR, "media")
MEDIA_URL = "/media/"

```

3.使用字段:

```
class Category(models.Model):
    name = models.CharField(verbose_name='类别名称',max_length=16)

class Article(models.Model):
    title = models.CharField(verbose_name='文章标题',max_length=32)
    category = models.ForeignKey('Category',blank=True,null=True,verbose_name='文章类别')
    summary = models.CharField(verbose_name='文章摘要',max_length=256)
    img = models.ImageField(upload_to="article_img/%Y-%m",verbose_name='显示图片',blank=True,default='')
    create_at = models.DateTimeField(auto_now_add=True,verbose_name='创建时间')
    detail = models.OneToOneField('ArticleDetail',verbose_name='文章详情',blank=True,null=True)


from ckeditor_uploader.fields import RichTextUploadingField
class ArticleDetail(models.Model):
    content = RichTextUploadingField(verbose_name='文章详情')
```

4.配置URL:

```python
from django.views.static import serve
from django.conf import settings
from ckeditor_uploader import views

urlpatterns = [

    url(r'^media/(?P.*)', serve, {'document_root': settings.MEDIA_ROOT}),
    # 上传文件
    url(r'^ckeditor/upload/', views.upload),
    url(r'^ckeditor/', include('ckeditor_uploader.urls')),

]
```

5.模板中:

```python
{{ field }}   富文本编辑框的字段



```

6.视图中:
```python
def article_add(request):
    form_obj = ArticleForm()
    detail_form = ArticleDetailForm()

    if request.method == 'POST':
        detail_form = ArticleDetailForm(request.POST)
        if detail_form.is_valid():
            detail_form.save()

        qd = request.POST.copy()
        qd['detail'] = detail_form.instance.pk  #注意是pk
        form_obj = ArticleForm(data=qd, files=request.FILES)
        if form_obj.is_valid():
            form_obj.save()
            return redirect('backend:article_list')

        ##防止多次添加
        if detail_form.is_valid() and detail_form.instance:
            detail_form.instance.delete()

    return render(request,'backend/article_form.html',{'form_obj':form_obj,'detail_form':detail_form})



def article_edit(request,pk):
    obj = models.Article.objects.filter(pk=pk).first()
    form_obj = ArticleForm(instance=obj)
    detail_form = ArticleDetailForm(instance=obj.detail) #

    if request.method == 'POST':
        detail_form = ArticleDetailForm(request.POST, instance=obj.detail)
        if detail_form.is_valid():
            detail_form.save()

        qd = request.POST.copy()
        qd['detail'] = detail_form.instance.pk  #注意是pk
        form_obj = ArticleForm(data=qd, files=request.FILES,instance=obj)
        if form_obj.is_valid():
            form_obj.save()
            return redirect('backend:article_list')

        ##这不用删了

    return render(request,'backend/article_form.html',{'form_obj':form_obj,'detail_form':detail_form})


def article_del(request,pk):
    obj = models.Article.objects.filter(pk=pk).first()
    obj.detail.delete()  #级联删除
    return redirect('backend:article_list')
```



```python
###############
"../../(.*?)"   ===>   "{% static '$1' %}"
"../../"  ===> {% get_static_prefix %}

"stylesheet" href="{% static 'css/style.css' %}">
"stylesheet" href="{% get_static_prefix %} css/style.css">
##############
```