Django自带的Admin后台,好用,TinyMCE作为富文本编辑器,也蛮好用的,这两者结合起来在做博客的时候很方便(当然博客可能更适合用Markdown来写),但是Django-TinyMCE这个组件默认没有图片上传功能的,需要我们自己实现,本文将一步步带大家实现这个图片上传功能。

读者也可以举一反三实现其他需要和Django结合的功能。

编写上传图片逻辑

在任一views.py里添加代码:

import os

from django.conf import settings
from django.http import JsonResponse
from django.utils import timezone
from django.views.decorators.csrf import csrf_exempt @csrf_exempt
def upload_image(request):
if request.method == "POST":
file_obj = request.FILES['file']
file_name_suffix = file_obj.name.split(".")[-1]
if file_name_suffix not in ["jpg", "png", "gif", "jpeg", ]:
return JsonResponse({"message": "错误的文件格式"}) upload_time = timezone.now()
path = os.path.join(
settings.MEDIA_ROOT,
'tinymce',
str(upload_time.year),
str(upload_time.month),
str(upload_time.day)
)
# 如果没有这个路径则创建
if not os.path.exists(path):
os.makedirs(path) file_path = os.path.join(path, file_obj.name) file_url = f'{settings.MEDIA_URL}tinymce/{upload_time.year}/{upload_time.month}/{upload_time.day}/{file_obj.name}' if os.path.exists(file_path):
return JsonResponse({
"message": "文件已存在",
'location': file_url
}) with open(file_path, 'wb+') as f:
for chunk in file_obj.chunks():
f.write(chunk) return JsonResponse({
'message': '上传图片成功',
'location': file_url
})
return JsonResponse({'detail': "错误的请求"})

配置路由

urlpatterns = [
# 上传图片
path('upload_image/', views.upload_image),
# tinymce 编辑器
path('tinymce/', include('tinymce.urls')),
]

配置tinymce

由于tinymce是一个前端组件,所以需要使用js来配置。

static/tinymce/js目录下添加一个js文件(目录不存在请手动创建),名字随意,我这里是textareas.js

tinymce.init({
selector: 'textarea', // change this value according to your HTML
images_upload_url: '/upload_image/', // Django路由中图片上传地址
height: 500,
plugins: [
'advlist autolink lists link image charmap print preview anchor',
'searchreplace visualblocks code fullscreen',
'insertdatetime media table paste code help wordcount'
],
menubar: 'favs file edit view insert format tools table help',
toolbar: 'undo redo | formatselect | ' +
'bold italic backcolor | alignleft aligncenter ' +
'alignright alignjustify | bullist numlist outdent indent | ' +
'code image | ' +
'removeformat | help',
language: 'zh_CN',
});

这段配置代码里面我加了一些插件,参照官方文档改了一下菜单栏和工具栏,并且把显示语言改成中文(默认是英文)。

注意里面的images_upload_url,这个是刚才配置了上传图片逻辑的路由。

关于TinyMCE的配置可以参考官方文档:https://www.tiny.cloud/docs/demo/basic-example/

在admin中配置

最后,我们需要在用到TinyMCE的admin中配置自定义的js,才能使前面的配置生效。

参考代码如下,按照自己的实际model配置就行了。

@admin.register(models.Activity)
class ActivityAdmin(admin.ModelAdmin):
list_display = ['pk', 'title'] class Media:
js = [
'tinymce/jquery.tinymce.min.js',
'tinymce/tinymce.min.js',
'tinymce/js/textareas.js'
]

测试

经过上面的配置就完成了,现在已经可以了,打开admin后台有tinymce字段的地方试一下呗~

效果OK~

参考资料

欢迎交流

我整理了一系列的技术文章和资料,在公众号「程序设计实验室」后台回复 linux、flutter、c#、netcore、android、kotlin、java、python 等可获取相关技术文章和资料,同时有任何问题都可以在公众号后台留言~

配置Django-TinyMCE组件支持上传图片功能的更多相关文章

  1. centos6.5配置uwsgi与nginx支持django

    一.centos中升级python 1. > wget https://www.python.org/ftp/python/3.5.4/Python-3.5.4.tgz # https://ww ...

  2. 八、Django的组件

    8.1.中间件 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影响 ...

  3. django form组件 cookies,session

    django form组件 渲染标签  就是组件里面的字段在前端展示叫做渲染标签 校验数据  用户输入的数据提交给后端组件叫做校验数据 forms组件中定义的字段都是必须传值的(required=Tr ...

  4. django Form组件

    django Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1.创建 ...

  5. django 分页组件

      一.仿django分页功能自己实现 urls.py 1 2 3 4 5 6 7 8 9 from django.conf.urls import url from django.contrib i ...

  6. SpringMVC上传图片总结(2)--- 使用百度webuploader上传组件进行上传图片

    SpringMVC上传图片总结(2)--- 使用百度webuploader上传组件进行上传图片   在上一篇文章中,我们介绍了< SpringMVC上传图片的常规上传方法 >.本文接着第一 ...

  7. WCF实现上传图片功能

    初次学习实现WCF winform程序的通信,主要功能是实现图片的传输. 下面是实现步骤: 第一步: 首先建立一个类库项目TransferPicLib,导入wcf需要的引用System.Service ...

  8. sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)

    sql server 关于表中只增标识问题   由于我们系统时间用的过长,数据量大,设计是采用自增ID 我们插入数据的时候把ID也写进去,我们可以采用 关闭和开启自增标识 没有关闭的时候 ,提示一下错 ...

  9. Tomcat系列之服务器的安装与配置以及各组件详解

    Tomcat系列之服务器的安装与配置以及各组件详解 大纲 一.前言 二.安装与配置Tomcat 三.Tomcat 目录的结构 四.Tomcat 配置文件 注,本文的测试的操作系统为CentOS 6.4 ...

随机推荐

  1. 在spyder中无法import module

    如果在anaconda中下载安装了模块,但是在spyder中无法import,可能是因为两个python环境并不一致,在promote重新conda install spyder即可

  2. Ethical Hacking - GAINING ACCESS(8)

    Server Side Attacks NeXpose - configure and launch a scan Configure and initialize the application. ...

  3. 使用Thanos实现Prometheus指标联邦

    本文来自Rancher Labs Prometheus是CNCF中已经毕业的项目之一,主要用于监控和告警.在Kubernetes生态中,它是应用最为广泛的监控和告警工具之一.Rancher用户可以通过 ...

  4. 【JVM之内存与垃圾回收篇】程序计数器

    程序计数器 介绍 JVM 中的程序计数寄存器(Program Counter Register)中,Register 的命名源于 CPU 的寄存器,寄存器存储指令相关的现场信息.CPU 只有把数据装载 ...

  5. MySQL 高级性能优化架构 千万级高并发交易一致性系统基础

    一.MySQL体系架构 由图,可以看出MySQL最上层是连接组件.下面服务器是由连接池.管理服务和工具组件.SQL接口.查询解析器.查询优化器.缓存.存储引擎.文件系统组成. 1.连接池 管理.缓冲用 ...

  6. Learning in the Frequency Domain 解读

    论文:Learning in the Frequency Domain, CVPR 2020 代码:https://github.com/calmevtime/DCTNet 实际的图像尺寸比较大,无法 ...

  7. spring notes

    ************************ nexus is a tool of warehouse managementfirst nexus search local warehous ,i ...

  8. stringsream用法

    stringstream: 头文件: #include <sstream> 简单整理一下这玩意的作用,主要有三个吧. 类型转化 字符串拼接 字符串整合(这一个用处特别大!!!!!!!) 先 ...

  9. Django学习路24_乘法和除法

    urls 中 url(r'getnum',views.getnum) views.py 中添加对应的函数 def getnum(request): num = 5 context_num = { 'n ...

  10. 第七章 vuex专题

    一.Vuex安装 一般在创建项目是会选择 Vuex,如果没有选择: cnpm install vuex  --save 使用: import Vuex from "vuex"; V ...