django admin后台接入tinymce并且支持图片上传
首先:下载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并且支持图片上传的更多相关文章
- [py][mx]django添加后台课程机构页数据-图片上传设置
分析下课程页前台部分 机构类别-目前机构库中没有这个字段,需要追加下 所在地区 xadmin可以手动添加 课程机构 涉及到机构封面图, 即图片上传media设置, 也需要在xadmin里手动添加几条 ...
- django之创建第10个项目-图片上传方式1
1.upload.HTMl <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang=& ...
- django之创建第10-1个项目-图片上传并记录上传时间
1.百度云盘:django之创建第10-1个项目-图片上传并记录上传时间 2.主要修改的配置文件有3个,forms.views和models3个文件以及html 3.forms.py文件修改 #cod ...
- 自定Tinymce中的图片上传
在引入组件上添加 上传图片的url地址 <tinymce :height="300" ref="tinymce" //上传图片的url地址 upload- ...
- 支持图片上传预览的 uploadPreview.js 插件
原文链接:http://www.lanrenzhijia.com/others/3148.html
- Thinkphp5+plupload图片上传功能,支持实时预览图片。
今天和大家分享一个国外的图片上传插件,这个插件支持分片上传大文件.其中著名的七牛云平台的jssdk就使用了puupload插件,可见这个插件还是相当牛叉的. 这个插件不仅仅支持图片上传,还支持大多数文 ...
- 原生JS实现异步图片上传(预览)
效果 实现过程分为两步 1. 用户点击添加后通过 H5文件读取 FileReader对象以DataURL的格式读取图片 2. 通过FormData对象生成表单数据,通过ajax上传到后台 HTML & ...
- input type=file实现图片上传,预览以及图片删除
背景 前两天在做一个PC网站的意见反馈,其中涉及到了图片上传功能,要求可以上传多张图片,并且支持图片上传预览及图片删除, 图片上传这一块以前没怎么搞过,而且一般也很少会碰到这样的需求,所以在做这个功能 ...
- ckeditor富文本编辑器的使用和图片上传,复制粘贴图片上传
自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了.一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器) ...
随机推荐
- CCF试题:高速公路(Targin)
问题描述 某国有n个城市,为了使得城市间的交通更便利,该国国王打算在城市之间修一些高速公路,由于经费限制,国王打算第一阶段先在部分城市之间修一些单向的高速公路. 现在,大臣们帮国王拟了一个修高速公路的 ...
- poj 2593&&poj2479(最大两子段和)
Max Sequence Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 16850 Accepted: 7054 Des ...
- gitlab和github的区别
先说一下相同点,二者都是基于web的Git仓库,在很大程度上GitLab是仿照GitHub来做的,它们都提供了分享开源项目的平台,为开发团队提供了存储.分享.发布和合作开发项目的中心化云存 ...
- PHP数组转对象,对象转数组
废话不多,直接上代码: <?php class object_array{ //数组转对象 public static function array_to_object($e){ if(gett ...
- ajax在提交url时候遇到的编码问题
//escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值.比如"春节"的返回结果是%u6625%u8282,escape()不对"+& ...
- 【剑指offer】面试题 28. 对称的二叉树
面试题 28. 对称的二叉树 题目描述 题目:请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 解答过程 给定一个二叉树,检查它是否是镜像 ...
- Luogu P2590 树的统计(树链剖分+线段树)
题意 原文很清楚了 题解 重链剖分模板题,用线段树维护即可. #include <cstdio> #include <cstring> #include <algorit ...
- 洛谷——P1869 愚蠢的组合数
P1869 愚蠢的组合数 题目描述 最近老师教了狗狗怎么算组合数,狗狗又想到了一个问题... 狗狗定义C(N,K)表示从N个元素中不重复地选取K个元素的方案数. 狗狗想知道的是C(N,K)的奇偶性. ...
- 【二分】Jessica's Reading Problem
[POJ3320]Jessica's Reading Problem Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1309 ...
- 【MySQL笔记】数据库的查询
数据库的查询 注:文中 [ ...] 代表该部分可以去掉. 理论基础:对表对象的一组关系运算,即选择(selection).投影(projection)和连接(join) 1.select语句 子语句 ...