首先:下载tinymce

地址是https://www.tinymce.com/

点击download

下载社区版本即可

接着:把压缩包内tinymce目录内的所有文件和文件夹复制到Django项目中static/js目录内:

然后编辑admin文件

class BlogAdmin(admin.ModelAdmin):
list_display = ("title", "author", "category", "public_time", "votes")
search_fields = ("title", "author", "category")
list_filter = ("public_time", "votes")
ordering = ("-public_time",) class Media:
js = (
'/static/js/jquery-3.2.1.min.js',
'/static/js/tinymce/js/tinymce/tinymce.min.js',
'/static/js/tinymce/js/tinymce/jquery.tinymce.min.js',
'/static/js/tinymce/js/tinymce/textareas.js'
)
admin.site.register(Blog, BlogAdmin)
 

紧接着在/static/js/tinymce/js/tinymce目录下新建一个textareas.js文件

tinymce.init({
selector: "textarea",
theme: "modern",
plugins: ["image"],
image_advtab: true,
paste_data_images: true,
file_browser_callback: function(field_name, url, type, win){
if(type=='image'){
$('#my_form input').click();
};
},
}) $( document ).ready(function() {
h ='<iframe id="form_target" name="form_target" style="display:none"></iframe><form id="my_form" action="/uploadImg/" target="form_target" method="post" enctype="multipart/form-data" style="width:0px;height:0;overflow:hidden"><input name="img" type="file" onchange="$(\'#my_form\').submit();this.value=\'\';"></form>';
$('body').append(h);
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
var csrftoken = getCookie('csrftoken');
$('#my_form').append('<input type="hidden" name="csrfmiddlewaretoken" value='+csrftoken+' />');
});

此时已经集成了tinymce编辑器了,但是文件上传功能还没结束

现在要创建一个model用来存放文件,一个url和视图函数来处理图片上传,以及在setting中配置

先一个个来,首先配置setting中的MEDIA_ROOT

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

接着编辑models文件

class BlogPic(models.Model):
filename = models.CharField(max_length=200, blank=True, null=True)
img = models.ImageField(upload_to='./media')

python manage.py makemigrations

python manage.py migrate

建立对应的数据库

然后就是urls文件,添加上传文件url

from blog.views import uploadImg

urlpatterns = [
url(r'uploadImg', uploadImg, name='uploadImg'),
url(r'^media/(?P<path>.*)$', serve, {'document_root': MEDIA_ROOT}),
]

最后编辑views视图函数

def uploadImg(request):
img = request.FILES.get('img')
adminImg = BlogPic()
adminImg.filename = img.name
adminImg.img = img
adminImg.save()
return HttpResponse("<script>top.$('.mce-btn.mce-open').parent().find('.mce-textbox').val('/media/%s')"
".closest('.mce-window').find('.mce-primary').click();</script>" %adminImg.img)

完成这些步骤之后就已经集成了tinymce,并且支持图片上传了

参考文献

http://blog.csdn.net/hjxzt1/article/details/78073596

http://blog.csdn.net/hjxzt1/article/details/78068972

django admin后台接入tinymce并且支持图片上传的更多相关文章

  1. [py][mx]django添加后台课程机构页数据-图片上传设置

    分析下课程页前台部分 机构类别-目前机构库中没有这个字段,需要追加下 所在地区 xadmin可以手动添加 课程机构 涉及到机构封面图, 即图片上传media设置, 也需要在xadmin里手动添加几条 ...

  2. django之创建第10个项目-图片上传方式1

    1.upload.HTMl <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang=& ...

  3. django之创建第10-1个项目-图片上传并记录上传时间

    1.百度云盘:django之创建第10-1个项目-图片上传并记录上传时间 2.主要修改的配置文件有3个,forms.views和models3个文件以及html 3.forms.py文件修改 #cod ...

  4. 自定Tinymce中的图片上传

    在引入组件上添加 上传图片的url地址 <tinymce :height="300" ref="tinymce" //上传图片的url地址 upload- ...

  5. 支持图片上传预览的 uploadPreview.js 插件

    原文链接:http://www.lanrenzhijia.com/others/3148.html

  6. Thinkphp5+plupload图片上传功能,支持实时预览图片。

    今天和大家分享一个国外的图片上传插件,这个插件支持分片上传大文件.其中著名的七牛云平台的jssdk就使用了puupload插件,可见这个插件还是相当牛叉的. 这个插件不仅仅支持图片上传,还支持大多数文 ...

  7. 原生JS实现异步图片上传(预览)

    效果 实现过程分为两步 1. 用户点击添加后通过 H5文件读取 FileReader对象以DataURL的格式读取图片 2. 通过FormData对象生成表单数据,通过ajax上传到后台 HTML & ...

  8. input type=file实现图片上传,预览以及图片删除

    背景 前两天在做一个PC网站的意见反馈,其中涉及到了图片上传功能,要求可以上传多张图片,并且支持图片上传预览及图片删除, 图片上传这一块以前没怎么搞过,而且一般也很少会碰到这样的需求,所以在做这个功能 ...

  9. ckeditor富文本编辑器的使用和图片上传,复制粘贴图片上传

    自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了.一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器) ...

随机推荐

  1. centos安装VNC的方法

    https://help.aliyun.com/knowledge_detail/6698160.html(阿里云官方文档,但是官方文档有些地方是错的,我更正了下) ----------------- ...

  2. Python 分页功能

    自定义分页组件 """ 自定义分页组件的使用方法: pager_obj = Pagination(request.GET.get('page',1),len(HOST_L ...

  3. 《java并发编程实战》读书笔记12--原子变量,非阻塞算法,CAS

    第15章 原子变量与非阻塞同步机制 近年来,在并发算法领域的大多数研究都侧重于非阻塞算法,这种算法用底层的原子机器指令(例如比较并交换指令)代替锁老确保数据在并发访问中的一致性. 15.1 锁的劣势 ...

  4. vConsole ~ 移动开发调试工具

    在开发移动端项目时,有时候在PC端好好的,但是到了手机上出bug,很难调试,这时候可以用vConsole调试工具 使用方式 1.直接引入 <script src="vconsole.m ...

  5. (翻译)一起使用 .NET 和 Docker——DockerCon 2018 更新

    原文:https://blogs.msdn.microsoft.com/dotnet/2018/06/13/using-net-and-docker-together-dockercon-2018-u ...

  6. websocket小荔枝

    关于websocket原理和好处请参考百度,这里只是代码. var ws = new WebSocket('ws://echo.websocket.org/'); ws.onopen = functi ...

  7. CodeForces 734E Anton and Tree

    $dfs$缩点,树形$dp$. 首先将连通块缩点,缩点后形成一个黑白节点相间的树.接下来的任务就是寻找一个$root$,使这棵树以$root$为根,树的高度是最小的(也就是一层一层染色).树形$dp$ ...

  8. Bzoj3197/洛谷3296 [SDOI2013]刺客信条assassin(树的重心+树Hash+树形DP+KM)

    题面 Bzoj 洛谷 题解 (除了代码均摘自喻队的博客,可是他退役了) 首先固定一棵树,枚举另一棵树,显然另一棵树只有与这棵树同构才有可能产生贡献 如果固定的树以重心为根,那么另一棵树最多就只有重心为 ...

  9. Luogu P2146 软件包管理器(树链剖分+线段树)

    题意 给定\(n\)个软件包,每个软件包都有一个依赖软件包,安装一个软件包必须安装他的依赖软件包,卸载一个软件包必须先卸载所有依赖于它的软件包.给定\(m\)此操作,每次一个操作\(install/u ...

  10. 洛谷——P1920 成功密码

    P1920 成功密码 题目描述 void_rank匪别人的书来看,原本想看杂志颓废的,结果不小心拿错拿成了被导师称作旁门左道的高中数学杂志<成功密码>.数学差得不行的void_rank实在 ...