亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 建站經驗 > 正文

百度編輯器UEditor插件DjangoUeditor使用方法

2024-04-25 20:31:23
字體:
來源:轉載
供稿:網友

百度編輯器UEditor插件DjangoUeditor安裝方法

* 方法一:將github整個源碼包下載回家,在命令行運行:

python setup.py install

* 方法二:使用pip工具在命令行運行(推薦):

pip install DjangoUeditor

2、在Django中安裝DjangoUeditor

在INSTALL_APPS里面增加DjangoUeditor app,如下:

INSTALLED_APPS = (
#........
'DjangoUeditor',
)

3、配置urls

url(r'^ueditor/',include('DjangoUeditor.urls' )),

4、在models中的使用

from DjangoUeditor.models import UEditorField
class Blog(models.Model):
Name=models.CharField(,max_length=100,blank=True)
Content=UEditorField(u'內容 ',width=600, height=300, toolbars="full", imagePath="", filePath="", upload_settings={"imageMaxSize":1204000},
settings={},command=None,event_handler=myEventHander(),blank=True)

說明

UEditorField繼承自models.TextField,因此你可以直接將model里面定義的models.TextField直接改成UEditorField即可。 定義UEditorField時除了可以直接傳入models.TextFieldUEditorField提供的參數外,還可以傳入UEditorField提供的額外的參數 來控制UEditorField的外觀、上傳路徑等。 UEditorField的參數如下:

width,height :編輯器的寬度和高度,以像素為單位。

toolbars :配置你想顯示的工具欄,取值為mini,normal,full,代表小,一般,全部。如果默認的工具欄的按鈕數量不符合您的要求,您可以在settings里面配置自己的顯示按鈕。參見后面介紹。

magePath :圖片上傳后保存的路徑,如"images/",實現上傳到"{{MEDIA_ROOT}}/images"文件夾。 注意:如果imagePath值只設置文件夾,則未尾要有"/" imagePath可以按python字符串格式化:如"images/%(basename)s_%(datetime)s.%(extname)"。這樣如果上傳test.png,則文件會 被保存為"{{MEDIA_ROOT}}/images/test_20140625122399.png"。 imagePath中可以使用的變量有:

time :上傳時的時間,datetime.datetime.now().strftime("%H%M%S")

date :上傳時的日期,datetime.datetime.now().strftime("%Y%m%d%")

datetime :上傳時的時間和日期,datetime.datetime.now().strftime("%Y%m%d%H%M%S")

year : 年month : 月

day : 日

rnd : 三位隨機數,random.randrange(100,999)

basename : 上傳的文件名稱,不包括擴展名

extname : 上傳的文件擴展名

filename : 上傳的文件名全稱

filePath : 附件上傳后保存的路徑,設置規則與imagePath一樣。

upload_settings : 字典值, 例:upload_settings={ imagePathFormat:"images/%(basename)s_%(datetime)s.%(extname)", imageMaxSize:323232 fileManagerListPath:"files" }

upload_settings的內容就是ueditor/php/config.json里面的配置內容,因此,你可以去看config.json或者官方文檔內容來決定 該如何配置upload_settings,基本上就是用來配置上傳的路徑、允許上傳的文件擴展名、最大上傳的文件大小之類的。

上面的imagePath和filePath被單獨提取出來配置,原因是因為這兩個參數是最常使用到的,imagePath就相當于upload_settings里面的 imagePathFormat,filePath就相當于upload_settings里面的filePathFormat。

您upload_settings里面設置了imagePathFormat,也可以在UeditorField里面設置imagePath,效果是一樣的。但是如果兩者均設置, 則imagePath優先級更高。

涂鴉文件、截圖、遠程抓圖、圖片庫的xxxxPathFormat如果沒有配置,默認等于imagePath.

遠程文件庫的xxxxPathFormat如果沒有配置,默認等于filePath.

settings : 字典值,配置項與ueditor/ueditor.config.js里面的配置項一致。

command : 可以為Ueditor新增一個按鈕、下拉框、對話框,例:

Description = UEditorField(u'描述', blank=True, toolbars="full", imagePath="cool/", settings={"a": 1},
command=[myBtn(uiName="mybtn1", icon="d.png", title=u"1摸我", ajax_url="/ajaxcmd/"),
myCombo(uiName="myCombo3",title=u"ccc",initValue="aaa")
])

以上代碼可以會Ueditor增加一個按鈕和一個下拉框。command是一個UEditorCommand的實例列表。如果你要在Ueditor的工具欄上增加一個 自定義按鈕,方法如下:

from DjangoUeditor.commands import UEditorButtonCommand,UEditorComboCommand
#定義自己的按鈕命令類
class myBtn(UEditorButtonCommand):
def onClick(self):
return u"""
alert("爽!"); //這里可以寫自己的js代碼
editor.execCommand(uiName);
"""
def onExecuteAjaxCommand(self,state):
""" 默認在command代碼里面加入一段ajax代碼,如果指定了ajax_url和重載本方法,則在單點按鈕后
會調用ajax_url.本方法重載是可選的。
"""
if state=="success":
return u"""
alert("后面比較爽!"+xhr.responseText);//這里可以寫ajax成功調用的js代碼
"""
if state=="error":
return u"""
alert("討厭,摸哪里去了!"+xhr.responseText);//這里可以寫ajax錯誤調用的js代碼
"""

 

UEditorButtonCommand有初始化參數:
uiName:按鈕名稱
title:按鈕提示信息
index:按鈕顯示的位置索引
ajax_url:單擊時調用的ajax url

UEditorComboCommand可以在Ueditor上增加一個下拉框
UEditorDialogCommand可以在Ueditor上增加一個對話框,一般與UEditorButtonCommand配合使用。暫未實現

event_handler : 用來為Ueditor實例綁定事件偵聽,比較當選擇區改變時將按鈕狀態置為禁止。

from DjangoUeditor.commands import UEditorEventHandler
class myEventHander(UEditorEventHandler):
def on_selectionchange(self):
return """
function getButton(btnName){
var items=%(editor)s.ui.toolbars[0].items;
for(item in items){
if(items[item].name==btnName){
return items[item];
}
}
}
var btn=getButton("mybtn1");
var selRanage=id_Description.selection.getRange()
btn.setDisabled(selRanage.startOffset == selRanage.endOffset);

 

"""

我們可以繼承UEditorEventHandler創建自己的事件偵聽類,例如上面myEventHander,然后在myEventHander中
增加on_eventname的方法,在里面返回偵聽該event的js代碼。例如上例on_selectionchange,就會在前端js中
生成id_Description.addListener('selectionchange', function () {.......});
如果要偵聽contentchange事件,就在myEventHander中增加一個on_contentchange方法,然后在該方法中返回js代碼。

5、在表單中使用非常簡單,與常規的form字段沒什么差別,如下:

class TestUeditorModelForm(forms.ModelForm):
class Meta:
model=Blog
***********************************
如果不是用ModelForm,可以有兩種方法使用:

 

1: 使用forms.UEditorField

from DjangoUeditor.forms import UEditorField
class TestUEditorForm(forms.Form):
Description=UEditorField("描述",initial="abc",width=600,height=800)

2: widgets.UEditorWidget

from DjangoUeditor.widgets import UEditorWidget
class TestUEditorForm(forms.Form):
Content=forms.CharField(label="內容",widget=UEditorWidget(width=800,height=500, imagePath='aa', filePath='bb',toolbars={}))

widgets.UEditorWidget和forms.UEditorField的輸入參數與上述models.UEditorField一樣。

6、Settings配置

在Django的Settings可以配置以下參數:
UEDITOR_SETTINGS={
"config":{
#這里放ueditor.config.js里面的配置項.......
},
"upload":{
#這里放php/config.json里面的配置項.......
}
}

7、在模板里面:

<head>
......
{{ form.media }} #這一句會將所需要的CSS和JS加進來。
......
</head>
注:運行collectstatic命令,將所依賴的css,js之類的文件復制到{{STATIC_ROOT}}文件夾里面。

8、高級運用:

****************
動態指定imagePathFormat等文件路徑
****************
這幾個路徑文件用于保存上傳的圖片或附件,您可以直接指定路徑,如:
UEditorField('內容',imagePath="uploadimg/")
則圖片會被上傳到"{{MEDIA_ROOT}}/uploadimg"文件夾,也可以指定為一個函數,如:

 

def getImagePath(model_instance=None):
return "abc/"
UEditorField('內容',imagePath=getImagePath)
則圖片會被上傳到"{{MEDIA_ROOT}}/abc"文件夾。
****************
使上傳路徑(如imagePathFormat)與Model實例字段值相關
****************
在有些情況下,我們可能想讓上傳的文件路徑是由當前Model實例字值組名而成,比如:
class Blog(Models.Model):
Name=models.CharField('姓名',max_length=100,blank=True)
Description=UEditorField('描述',blank=True,imagePath=getUploadPath,toolbars="full")

id | Name | Description
------------------------------------
1 | Tom | ...........
2 | Jack | ...........

我們想讓第一條記錄上傳的圖片或附件上傳到"{{MEDIA_ROOT}}/Tom"文件夾,第2條記錄則上傳到"{{MEDIA_ROOT}}/Jack"文件夾。
該怎么做呢,很簡單。
def getUploadPath(model_instance=None):
return "%s/" % model_instance.Name
在Model里面這樣定義:
Description=UEditorField('描述',blank=True,imagePath=getUploadPath,toolbars="full")
這上面model_instance就是當前model的實例對象。
還需要這樣定義表單對象:
from DjangoUeditor.forms import UEditorModelForm
class UEditorTestModelForm(UEditorModelForm):
class Meta:
model=Blog
特別注意:
**表單對象必須是繼承自UEditorModelForm,否則您會發現model_instance總會是None。
**同時在Admin管理界面中,此特性無效,model_instance總會是None。
**在新建表單中,model_instance由于還沒有保存到數據庫,所以如果訪問model_instance.pk可能是空的。因為您需要在getUploadPath處理這種情況

9、其他事項:

**本程序版本號采用a.b.ccc,其中a.b是本程序的號,ccc是ueditor的版本號,如1.2.122,1.2是DjangoUeditor的版本號,122指Ueditor 1.2.2.
**本程序安裝包里面已經包括了Ueditor,不需要再額外安裝。
**目前暫時不支持ueditor的插件
**別忘記了運行collectstatic命令,該命令可以將ueditor的所有文件復制到{{STATIC_ROOT}}文件夾里面
**Django默認開啟了CSRF中間件,因此如果你的表單沒有加入{% csrf_token %},那么當您上傳文件和圖片時會失敗

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色综久久综合桃花网| 欧美丝袜美女中出在线| 91成人性视频| 91免费精品国偷自产在线| 国产在线一区二区三区| 日韩av在线精品| 欧美在线一级va免费观看| 日韩三级影视基地| 69av视频在线播放| 亚洲综合中文字幕在线| 日韩电影免费观看在线| 国产精品福利久久久| 亚洲国产精品热久久| 91精品国产91| 亚洲精品久久视频| 国产精品一区二区久久久| 亚洲最大成人网色| 91日韩在线播放| 国产精品高潮粉嫩av| 亚洲跨种族黑人xxx| 色综合久久天天综线观看| 欧美最顶级的aⅴ艳星| 欧美精品一区二区免费| 色青青草原桃花久久综合| 久久久久国产精品一区| 亚洲一区二区自拍| 亚洲欧美日韩中文在线| 久久久久久欧美| 日韩动漫免费观看电视剧高清| 亚洲欧美国产精品久久久久久久| 日韩中文字幕在线精品| 91久久夜色精品国产网站| 亚洲精品国精品久久99热| 欧美成人免费全部| 日韩精品视频观看| 亚洲人成电影网站色…| 亚洲视频999| 中文字幕在线精品| 91久久久久久久久久| 日本精品中文字幕| 欧美激情精品久久久久久免费印度| 中文字幕日韩欧美| 亚洲人精品午夜在线观看| 国产精品久久久久久网站| 亚洲欧美福利视频| 日韩视频在线免费观看| 在线观看中文字幕亚洲| 福利微拍一区二区| 亚洲情综合五月天| 久久久久久综合网天天| 成人精品一区二区三区电影黑人| 亚洲少妇激情视频| 国产成人jvid在线播放| 国产精品极品美女在线观看免费| 日韩成人激情影院| 亚洲一区制服诱惑| 亚洲综合自拍一区| 国产91精品久久久久久| 日韩在线观看网站| 97在线视频国产| 国产精品国语对白| 九色精品美女在线| 日本欧美中文字幕| 国产成人中文字幕| 日韩av在线网站| 国产在线观看不卡| 欧美国产日韩免费| 一区二区在线免费视频| 欧美在线性视频| 亚洲自拍偷拍网址| 欧美网站在线观看| 久久久久久久一区二区三区| 97碰碰碰免费色视频| 日韩电影免费观看中文字幕| 精品久久香蕉国产线看观看亚洲| 亚洲欧美激情视频| 亚洲精品白浆高清久久久久久| 欧美极品xxxx| 国产精品久久久久久久久久久久| 国产亚洲欧美另类中文| 成人黄色免费片| 国产欧美一区二区白浆黑人| 中文字幕日韩高清| 欧美国产日韩视频| 亚洲国产精品免费| 国产精品久久综合av爱欲tv| 欧美一级电影久久| 国产精品极品美女在线观看免费| 午夜精品久久久久久久久久久久久| 欧美午夜精品久久久久久人妖| 亚洲午夜色婷婷在线| 欧美一级视频在线观看| 国产极品jizzhd欧美| 91九色视频在线| 2021久久精品国产99国产精品| 国模精品视频一区二区| 国产精品日韩在线一区| 日本中文字幕成人| 91人成网站www| 亚洲精品久久久久久久久久久久| 日本欧美一二三区| 国产精自产拍久久久久久| 欧美黄色片免费观看| 疯狂做受xxxx高潮欧美日本| 国外成人性视频| 欧美日韩国产一区二区三区| 日韩在线观看高清| 久热精品视频在线免费观看| 国精产品一区一区三区有限在线| 亚洲激情小视频| 亚洲三级av在线| 亚洲成人久久久久| 欧美成人激情视频| 成人情趣片在线观看免费| 国产亚洲精品美女久久久久| 欧美日韩国产成人高清视频| 亚洲iv一区二区三区| 亚洲欧美国产另类| 国产精品一区二区三区成人| 国内精品免费午夜毛片| 97涩涩爰在线观看亚洲| 久久亚洲国产精品成人av秋霞| 91国内免费在线视频| 欧美黑人性视频| 国产福利视频一区| 亚洲美女自拍视频| 欧美激情一区二区三区久久久| 国产国产精品人在线视| 精品福利在线视频| 久久99热这里只有精品国产| 97视频国产在线| 国产精品手机播放| 久久综合伊人77777| 国产成人精品久久| 国产婷婷色综合av蜜臀av| 欧美性猛交视频| 午夜精品久久久久久99热| 日韩在线免费观看视频| 热99精品只有里视频精品| 成人久久18免费网站图片| 亚洲一区二区自拍| 日韩成人av一区| 亚洲香蕉伊综合在人在线视看| 欧洲成人免费视频| 国产伊人精品在线| 日韩av免费在线观看| 亚洲第一免费网站| 亚洲午夜未满十八勿入免费观看全集| 国产精品扒开腿做爽爽爽视频| 国产69精品久久久久9999| 亚洲爱爱爱爱爱| 亚洲伊人成综合成人网| 国产精品免费一区二区三区都可以| 国产精品亚洲第一区| 国产欧美日韩亚洲精品| 亚洲美女又黄又爽在线观看| 在线看片第一页欧美| 欧美性xxxx极品高清hd直播| 国产一区二中文字幕在线看| 大桥未久av一区二区三区| 久久精品国产欧美激情| 2019中文在线观看| 97精品视频在线观看| 亚洲摸下面视频|