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 super(RequiredFileUploadWidget, self).__init__(attrs) def render(self, name, value, attrs=None): output = [] if value and hasattr(value, 'url'): output.append('Current file: '.format(value.url)) if self.filename: output.append(self.filename) else: output.append(value.name) output.append('
') 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)