widgets.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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 utils import FixFilePath
  10. import settings as uSettings
  11. class UEditorWidget(forms.Textarea):
  12. def __init__(self,width=600,height=300,plugins=(),toolbars="normal",filePath="",imagePath="",imageManagerPath="",css="",options={}, attrs=None):
  13. uOptions={}
  14. #图片上传路径
  15. uOptions['imagePath']=FixFilePath(imagePath)
  16. #附件上传路径
  17. uOptions['filePath']=FixFilePath(filePath)
  18. #图片管理器路径,如果没有指定,则默认等于image上传路径
  19. if len(imageManagerPath)==0:
  20. uOptions['imageManagerPath']=uOptions['imagePath']
  21. else:
  22. uOptions['imageManagerPath']=FixFilePath(imageManagerPath)
  23. uOptions['css']=css
  24. uOptions['plugins']=plugins
  25. uOptions['toolbars']=toolbars
  26. uOptions['options']=options
  27. uOptions['width']=width
  28. uOptions['height']=height
  29. self.ueditor_options=uOptions
  30. super(UEditorWidget, self).__init__(attrs)
  31. def render(self, name, value, attrs=None):
  32. if value is None: value = ''
  33. #取得工具栏设置
  34. if self.ueditor_options['toolbars']=="mini":
  35. tbar=uSettings.TOOLBARS_SETTINGS["mini"]
  36. elif self.ueditor_options['toolbars']=="normal":
  37. tbar=uSettings.TOOLBARS_SETTINGS["normal"]
  38. else:
  39. tbar=None
  40. #传入模板的参数
  41. uOptions=self.ueditor_options.copy()
  42. uOptions.update({
  43. "name":name,
  44. "value":conditional_escape(force_unicode(value)),
  45. "toolbars":str(tbar),
  46. "options":str(self.ueditor_options['options'])[1:-1].replace("True","true").replace("False","false").replace("'",'"')
  47. })
  48. context = {
  49. 'UEditor':uOptions,
  50. 'STATIC_URL':settings.STATIC_URL,
  51. 'STATIC_ROOT':settings.STATIC_ROOT,
  52. 'MEDIA_URL':settings.MEDIA_URL,
  53. 'MEDIA_ROOT':settings.MEDIA_ROOT
  54. }
  55. return mark_safe(render_to_string('ueditor.html',context))
  56. class Media:
  57. css={"all": ("ueditor/themes/default/ueditor.css" ,
  58. "ueditor/themes/default/iframe.css" ,
  59. )}
  60. js=("ueditor/editor_config.js",
  61. "ueditor/editor_all_min.js")
  62. class AdminUEditorWidget(AdminTextareaWidget, UEditorWidget):
  63. def __init__(self,**kwargs):
  64. self.ueditor_options=kwargs
  65. super(UEditorWidget,self).__init__(kwargs)