Add widgets for pretty-printing json
authorMagnus Hagander <magnus@hagander.net>
Tue, 26 Jun 2018 19:42:38 +0000 (21:42 +0200)
committerMagnus Hagander <magnus@hagander.net>
Wed, 27 Jun 2018 10:55:04 +0000 (12:55 +0200)
postgresqleu/util/widgets.py

index dd4dbd550cbe857ec25d40c5d1fa89da7e974d21..7a5404d2e259468b2f3df6a38d166402a04ac6ef 100644 (file)
@@ -1,6 +1,8 @@
 from django import forms
 from django.utils.safestring import mark_safe
 
+import json
+
 class RequiredFileUploadWidget(forms.FileInput):
        def __init__(self, filename=None, attrs=None):
                self.filename = filename
@@ -18,3 +20,20 @@ class RequiredFileUploadWidget(forms.FileInput):
                output.append("Upload new file: ")
                output.append(super(RequiredFileUploadWidget, self).render(name, value, attrs))
                return mark_safe(u''.join(output))
+
+class PrettyPrintJsonWidget(forms.Textarea):
+       def render(self, name, value, attrs=None, renderer=None):
+               # This is mighty ugly -- we parse the json and then turn it back into json.
+               # Luckily this isn't called often :)
+               try:
+                       value = json.dumps(json.loads(value), indent=2)
+               except ValueError:
+                       # Don't try to do anything if it's not valid json
+                       pass
+               t = super(PrettyPrintJsonWidget, self).render(name, value, attrs, renderer)
+               return t
+
+class AdminJsonWidget(PrettyPrintJsonWidget):
+       def render(self, name, value, attrs=None, renderer=None):
+               attrs['cols'] = 100
+               return super(AdminJsonWidget, self).render(name, value, attrs, renderer)