widgets.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #coding:utf-8
  2. from django import forms
  3. from django.conf import settings
  4. from django.contrib.admin.widgets import AdminTextareaWidget
  5. from django.template.loader import render_to_string
  6. from django.utils.safestring import mark_safe
  7. from django.utils.html import conditional_escape
  8. from django.utils.encoding import force_unicode
  9. from django.utils import simplejson
  10. from utils import FixFilePath
  11. import settings as USettings
  12. class UEditorWidget(forms.Textarea):
  13. def __init__(self,width=600,height=300,plugins=(),toolbars="normal",filePath="",imagePath="",imageManagerPath="",css="",options={}, attrs=None):
  14. uOptions={}
  15. #图片上传路径
  16. uOptions['imagePath']=FixFilePath(imagePath)
  17. #附件上传路径
  18. uOptions['filePath']=FixFilePath(filePath)
  19. #图片管理器路径,如果没有指定,则默认等于image上传路径
  20. if len(imageManagerPath)==0:
  21. uOptions['imageManagerPath']=uOptions['imagePath']
  22. else:
  23. uOptions['imageManagerPath']=FixFilePath(imageManagerPath)
  24. uOptions['css']=css
  25. uOptions['plugins']=plugins
  26. uOptions['toolbars']=toolbars
  27. uOptions['options']=options
  28. uOptions['width']=width
  29. uOptions['height']=height
  30. self.ueditor_options=uOptions
  31. super(UEditorWidget, self).__init__(attrs)
  32. def render(self, name, value, attrs=None):
  33. if value is None: value = ''
  34. #取得工具栏设置
  35. try:
  36. if type(self.ueditor_options['toolbars'])==list:
  37. tbar=simplejson.dumps(self.ueditor_options['toolbars'])
  38. else:
  39. if getattr(USettings,"TOOLBARS_SETTINGS",{}).has_key(str(self.ueditor_options['toolbars'])):
  40. tbar=simplejson.dumps(USettings.TOOLBARS_SETTINGS[str(self.ueditor_options['toolbars'])])
  41. else:
  42. tbar=None
  43. except Exception:
  44. pass
  45. #传入模板的参数
  46. uOptions=self.ueditor_options.copy()
  47. uOptions.update({
  48. "name":name,
  49. "value":conditional_escape(force_unicode(value)),
  50. "toolbars":tbar,
  51. "options":simplejson.dumps(self.ueditor_options['options'])[1:-1]
  52. #str(self.ueditor_options['options'])[1:-1].replace("True","true").replace("False","false").replace("'",'"')
  53. })
  54. context = {
  55. 'UEditor':uOptions,
  56. 'STATIC_URL':settings.STATIC_URL,
  57. 'STATIC_ROOT':settings.STATIC_ROOT,
  58. 'MEDIA_URL':settings.MEDIA_URL,
  59. 'MEDIA_ROOT':settings.MEDIA_ROOT
  60. }
  61. return mark_safe(render_to_string('ueditor.html',context))
  62. class Media:
  63. css={"all": ("ueditor/themes/default/ueditor.css" ,
  64. "ueditor/themes/default/iframe.css" ,
  65. )}
  66. js=("ueditor/editor_config.js",
  67. "ueditor/editor_all_min.js")
  68. class AdminUEditorWidget(AdminTextareaWidget, UEditorWidget):
  69. def __init__(self,**kwargs):
  70. self.ueditor_options=kwargs
  71. super(UEditorWidget,self).__init__(kwargs)