Эх сурвалжийг харах

fix widgets.py for Django >= 2.1:
def render(self, name, value, attrs=None):
# 修改为
def render(self, name, value, attrs=None, renderer=None):

rMBP13 6 жил өмнө
parent
commit
9592f486bc
1 өөрчлөгдсөн 176 нэмэгдсэн , 174 устгасан
  1. 176 174
      DjangoUeditor/widgets.py

+ 176 - 174
DjangoUeditor/widgets.py

@@ -1,174 +1,176 @@
-# coding:utf-8
-from django import forms
-from django.conf import settings
-from django.contrib.admin.widgets import AdminTextareaWidget
-from django.template.loader import render_to_string
-from django.utils.safestring import mark_safe
-from django.utils.http import urlencode
-from . import settings as USettings
-from .commands import *
-from django.utils.six import string_types
-
-# 修正输入的文件路径,输入路径的标准格式:abc,不需要前后置的路径符号
-# 如果输入的路径参数是一个函数则执行,否则可以拉接受时间格式化,用来生成如file20121208.bmp的重命名格式
-
-
-def calc_path(OutputPath, instance=None):
-    if callable(OutputPath):
-        try:
-            OutputPath = OutputPath(instance)
-        except:
-            OutputPath = ""
-    else:
-        try:
-            import datetime
-            OutputPath = datetime.datetime.now().strftime(OutputPath)
-        except:
-            pass
-
-    return OutputPath
-
-# width=600, height=300, toolbars="full", imagePath="", filePath="", upload_settings={},
-    # settings={},command=None,event_handler=None
-
-
-class UEditorWidget(forms.Textarea):
-
-    def __init__(self, attrs=None):
-
-        params = attrs.copy()
-
-        width = params.pop("width")
-        height = params.pop("height")
-        toolbars = params.pop("toolbars", "full")
-        imagePath = params.pop("imagePath", "")
-        filePath = params.pop("filePath", "")
-        upload_settings = params.pop("upload_settings", {})
-        settings = params.pop("settings", {})
-        command = params.pop("command", None)
-        event_handler = params.pop("event_handler", None)
-
-        # 扩展命令
-        self.command = command
-        self.event_handler = event_handler
-        # 上传路径
-        self.upload_settings = upload_settings.copy()
-        self.upload_settings.update({
-            "imagePathFormat": imagePath,
-            "filePathFormat": filePath
-        })
-        # 保存
-        self._upload_settings = self.upload_settings.copy()
-        self.recalc_path(None)
-
-        self.ueditor_settings = {
-            'toolbars': toolbars,
-            'initialFrameWidth': width,
-            'initialFrameHeight': height
-        }
-        # 以下处理工具栏设置,将normal,mini等模式名称转化为工具栏配置值
-        if toolbars == "full":
-            del self.ueditor_settings['toolbars']
-        elif isinstance(toolbars, string_types) and toolbars in USettings.TOOLBARS_SETTINGS:
-            self.ueditor_settings[
-                "toolbars"] = USettings.TOOLBARS_SETTINGS[toolbars]
-        else:
-            self.ueditor_settings["toolbars"] = toolbars
-            # raise ValueError('toolbars should be a string defined in DjangoUeditor.settings.TOOLBARS_SETTINGS, options are full(default), besttome, mini and normal!')
-        self.ueditor_settings.update(settings)
-        super(UEditorWidget, self).__init__(attrs)
-
-    def recalc_path(self, model_inst):
-        """计算上传路径,允许是function"""
-        try:
-            uSettings = self.upload_settings
-            if 'filePathFormat' in self._upload_settings:
-                uSettings['filePathFormat'] = calc_path(
-                    self._upload_settings['filePathFormat'], model_inst)
-            if 'imagePathFormat' in self._upload_settings:
-                uSettings['imagePathFormat'] = calc_path(
-                    self._upload_settings['imagePathFormat'], model_inst)
-            if 'scrawlPathFormat' in self._upload_settings:
-                uSettings['scrawlPathFormat'] = calc_path(
-                    self._upload_settings['scrawlPathFormat'], model_inst)
-            if 'videoPathFormat' in self._upload_settings:
-                uSettings['videoPathFormat'] = calc_path(
-                    self._upload_settings['videoPathFormat'], model_inst),
-            if 'snapscreenPathFormat' in self._upload_settings:
-                uSettings['snapscreenPathFormat'] = calc_path(
-                    self._upload_settings['snapscreenPathFormat'], model_inst)
-            if 'catcherPathFormat' in self._upload_settings:
-                uSettings['catcherPathFormat'] = calc_path(
-                    self._upload_settings['catcherPathFormat'], model_inst)
-            if 'imageManagerListPath' in self._upload_settings:
-                uSettings['imageManagerListPath'] = calc_path(
-                    self._upload_settings['imageManagerListPath'], model_inst)
-            if 'fileManagerListPath' in self._upload_settings:
-                uSettings['fileManagerListPath'] = calc_path(
-                    self._upload_settings['fileManagerListPath'], model_inst)
-            # 设置默认值,未指定涂鸦、截图、远程抓图、图片目录时,默认均等于imagePath
-            if uSettings['imagePathFormat'] != "":
-                default_path = uSettings['imagePathFormat']
-
-                uSettings['scrawlPathFormat'] = uSettings.get(
-                    'scrawlPathFormat', default_path)
-                uSettings['videoPathFormat'] = uSettings.get(
-                    'videoPathFormat', default_path)
-                uSettings['snapscreenPathFormat'] = uSettings.get(
-                    'snapscreenPathFormat', default_path)
-                uSettings['catcherPathFormat'] = uSettings.get(
-                    'catcherPathFormat', default_path)
-                uSettings['imageManagerListPath'] = uSettings.get(
-                    'imageManagerListPath', default_path)
-
-            if uSettings['filePathFormat'] != "":
-                uSettings['fileManagerListPath'] = uSettings.get(
-                    'fileManagerListPath', uSettings['filePathFormat'])
-        except:
-            pass
-
-    def render(self, name, value, attrs=None):
-        if value is None:
-            value = ''
-        # 传入模板的参数
-        editor_id = "id_%s" % name.replace("-", "_")
-        uSettings = {
-            "name": name,
-            "id": editor_id,
-            "value": value
-        }
-        if isinstance(self.command, list):
-            cmdjs = ""
-            if isinstance(self.command, list):
-                for cmd in self.command:
-                    cmdjs = cmdjs + cmd.render(editor_id)
-            else:
-                cmdjs = self.command.render(editor_id)
-            uSettings["commands"] = cmdjs
-
-        uSettings["settings"] = self.ueditor_settings.copy()
-        uSettings["settings"].update({
-            "serverUrl": "/ueditor/controller/?%s" % urlencode(self._upload_settings)
-        })
-        # 生成事件侦听
-        if self.event_handler:
-            uSettings["bindEvents"] = self.event_handler.render(editor_id)
-
-        context = {
-            'UEditor': uSettings,
-            'STATIC_URL': settings.STATIC_URL,
-            'STATIC_ROOT': settings.STATIC_ROOT,
-            'MEDIA_URL': settings.MEDIA_URL,
-            'MEDIA_ROOT': settings.MEDIA_ROOT
-        }
-        return mark_safe(render_to_string('ueditor.html', context))
-
-    class Media:
-        js = ("ueditor/ueditor.config.js",
-              "ueditor/ueditor.all.min.js")
-
-
-class AdminUEditorWidget(AdminTextareaWidget, UEditorWidget):
-
-    def __init__(self, **kwargs):
-        super(AdminUEditorWidget, self).__init__(**kwargs)
+# coding:utf-8
+from django import forms
+from django.conf import settings
+from django.contrib.admin.widgets import AdminTextareaWidget
+from django.template.loader import render_to_string
+from django.utils.safestring import mark_safe
+from django.utils.http import urlencode
+from . import settings as USettings
+from .commands import *
+from django.utils.six import string_types
+
+
+# 修正输入的文件路径,输入路径的标准格式:abc,不需要前后置的路径符号
+# 如果输入的路径参数是一个函数则执行,否则可以拉接受时间格式化,用来生成如file20121208.bmp的重命名格式
+
+
+def calc_path(OutputPath, instance=None):
+    if callable(OutputPath):
+        try:
+            OutputPath = OutputPath(instance)
+        except:
+            OutputPath = ""
+    else:
+        try:
+            import datetime
+            OutputPath = datetime.datetime.now().strftime(OutputPath)
+        except:
+            pass
+
+    return OutputPath
+
+
+# width=600, height=300, toolbars="full", imagePath="", filePath="", upload_settings={},
+# settings={},command=None,event_handler=None
+
+
+class UEditorWidget(forms.Textarea):
+
+    def __init__(self, attrs=None):
+
+        params = attrs.copy()
+
+        width = params.pop("width")
+        height = params.pop("height")
+        toolbars = params.pop("toolbars", "full")
+        imagePath = params.pop("imagePath", "")
+        filePath = params.pop("filePath", "")
+        upload_settings = params.pop("upload_settings", {})
+        settings = params.pop("settings", {})
+        command = params.pop("command", None)
+        event_handler = params.pop("event_handler", None)
+
+        # 扩展命令
+        self.command = command
+        self.event_handler = event_handler
+        # 上传路径
+        self.upload_settings = upload_settings.copy()
+        self.upload_settings.update({
+            "imagePathFormat": imagePath,
+            "filePathFormat": filePath
+        })
+        # 保存
+        self._upload_settings = self.upload_settings.copy()
+        self.recalc_path(None)
+
+        self.ueditor_settings = {
+            'toolbars': toolbars,
+            'initialFrameWidth': width,
+            'initialFrameHeight': height
+        }
+        # 以下处理工具栏设置,将normal,mini等模式名称转化为工具栏配置值
+        if toolbars == "full":
+            del self.ueditor_settings['toolbars']
+        elif isinstance(toolbars, string_types) and toolbars in USettings.TOOLBARS_SETTINGS:
+            self.ueditor_settings[
+                "toolbars"] = USettings.TOOLBARS_SETTINGS[toolbars]
+        else:
+            self.ueditor_settings["toolbars"] = toolbars
+            # raise ValueError('toolbars should be a string defined in DjangoUeditor.settings.TOOLBARS_SETTINGS, options are full(default), besttome, mini and normal!')
+        self.ueditor_settings.update(settings)
+        super(UEditorWidget, self).__init__(attrs)
+
+    def recalc_path(self, model_inst):
+        """计算上传路径,允许是function"""
+        try:
+            uSettings = self.upload_settings
+            if 'filePathFormat' in self._upload_settings:
+                uSettings['filePathFormat'] = calc_path(
+                    self._upload_settings['filePathFormat'], model_inst)
+            if 'imagePathFormat' in self._upload_settings:
+                uSettings['imagePathFormat'] = calc_path(
+                    self._upload_settings['imagePathFormat'], model_inst)
+            if 'scrawlPathFormat' in self._upload_settings:
+                uSettings['scrawlPathFormat'] = calc_path(
+                    self._upload_settings['scrawlPathFormat'], model_inst)
+            if 'videoPathFormat' in self._upload_settings:
+                uSettings['videoPathFormat'] = calc_path(
+                    self._upload_settings['videoPathFormat'], model_inst),
+            if 'snapscreenPathFormat' in self._upload_settings:
+                uSettings['snapscreenPathFormat'] = calc_path(
+                    self._upload_settings['snapscreenPathFormat'], model_inst)
+            if 'catcherPathFormat' in self._upload_settings:
+                uSettings['catcherPathFormat'] = calc_path(
+                    self._upload_settings['catcherPathFormat'], model_inst)
+            if 'imageManagerListPath' in self._upload_settings:
+                uSettings['imageManagerListPath'] = calc_path(
+                    self._upload_settings['imageManagerListPath'], model_inst)
+            if 'fileManagerListPath' in self._upload_settings:
+                uSettings['fileManagerListPath'] = calc_path(
+                    self._upload_settings['fileManagerListPath'], model_inst)
+            # 设置默认值,未指定涂鸦、截图、远程抓图、图片目录时,默认均等于imagePath
+            if uSettings['imagePathFormat'] != "":
+                default_path = uSettings['imagePathFormat']
+
+                uSettings['scrawlPathFormat'] = uSettings.get(
+                    'scrawlPathFormat', default_path)
+                uSettings['videoPathFormat'] = uSettings.get(
+                    'videoPathFormat', default_path)
+                uSettings['snapscreenPathFormat'] = uSettings.get(
+                    'snapscreenPathFormat', default_path)
+                uSettings['catcherPathFormat'] = uSettings.get(
+                    'catcherPathFormat', default_path)
+                uSettings['imageManagerListPath'] = uSettings.get(
+                    'imageManagerListPath', default_path)
+
+            if uSettings['filePathFormat'] != "":
+                uSettings['fileManagerListPath'] = uSettings.get(
+                    'fileManagerListPath', uSettings['filePathFormat'])
+        except:
+            pass
+
+    def render(self, name, value, attrs=None, renderer=None):
+        if value is None:
+            value = ''
+        # 传入模板的参数
+        editor_id = "id_%s" % name.replace("-", "_")
+        uSettings = {
+            "name": name,
+            "id": editor_id,
+            "value": value
+        }
+        if isinstance(self.command, list):
+            cmdjs = ""
+            if isinstance(self.command, list):
+                for cmd in self.command:
+                    cmdjs = cmdjs + cmd.render(editor_id)
+            else:
+                cmdjs = self.command.render(editor_id)
+            uSettings["commands"] = cmdjs
+
+        uSettings["settings"] = self.ueditor_settings.copy()
+        uSettings["settings"].update({
+            "serverUrl": "/ueditor/controller/?%s" % urlencode(self._upload_settings)
+        })
+        # 生成事件侦听
+        if self.event_handler:
+            uSettings["bindEvents"] = self.event_handler.render(editor_id)
+
+        context = {
+            'UEditor': uSettings,
+            'STATIC_URL': settings.STATIC_URL,
+            'STATIC_ROOT': settings.STATIC_ROOT,
+            'MEDIA_URL': settings.MEDIA_URL,
+            'MEDIA_ROOT': settings.MEDIA_ROOT
+        }
+        return mark_safe(render_to_string('ueditor.html', context))
+
+    class Media:
+        js = ("ueditor/ueditor.config.js",
+              "ueditor/ueditor.all.min.js")
+
+
+class AdminUEditorWidget(AdminTextareaWidget, UEditorWidget):
+
+    def __init__(self, **kwargs):
+        super(AdminUEditorWidget, self).__init__(**kwargs)