Display structs in contact form nicely.
authorRadek Czajka <radekczajka@nowoczesnapolska.org.pl>
Tue, 8 Oct 2013 09:19:18 +0000 (11:19 +0200)
committerRadek Czajka <radekczajka@nowoczesnapolska.org.pl>
Tue, 8 Oct 2013 09:19:18 +0000 (11:19 +0200)
contact/admin.py
contact/models.py
contact/templates/contact/mail_managers_body.txt
contact/templatetags/__init__.py [new file with mode: 0755]
contact/templatetags/contact_tags.py [new file with mode: 0755]
requirements.txt

index ee1623d..33b1963 100644 (file)
@@ -29,7 +29,7 @@ class ContactAdmin(admin.ModelAdmin):
         except BaseException, e:
             return ''
         else:
         except BaseException, e:
             return ''
         else:
-            return obj.body.get(field_name, '')
+            return Contact.pretty_print(obj.body.get(field_name, ''), for_html=True)
 
     def __getattr__(self, name):
         if name.startswith('admin_list_'):
 
     def __getattr__(self, name):
         if name.startswith('admin_list_'):
@@ -75,7 +75,7 @@ class ContactAdmin(admin.ModelAdmin):
 
                 # Create field getters for fields and attachments.
                 for k, v in instance.body.items():
 
                 # Create field getters for fields and attachments.
                 for k, v in instance.body.items():
-                    f = (lambda v: lambda self: v)(v)
+                    f = (lambda v: lambda self: v)(Contact.pretty_print(v, for_html=True))
                     f.short_description = orig_fields[k].label if k in orig_fields else _(k)
                     setattr(self, "body__%s" % k, f)
 
                     f.short_description = orig_fields[k].label if k in orig_fields else _(k)
                     setattr(self, "body__%s" % k, f)
 
index 21d8405..6b33d29 100644 (file)
@@ -1,4 +1,5 @@
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
+import yaml
 from django.core.files.storage import FileSystemStorage
 from django.db import models
 from django.utils.translation import ugettext_lazy as _
 from django.core.files.storage import FileSystemStorage
 from django.db import models
 from django.utils.translation import ugettext_lazy as _
@@ -13,6 +14,16 @@ class Contact(models.Model):
     form_tag = models.CharField(_('form'), max_length=32, db_index=True)
     body = JSONField(_('body'))
 
     form_tag = models.CharField(_('form'), max_length=32, db_index=True)
     body = JSONField(_('body'))
 
+    @staticmethod
+    def pretty_print(value, for_html=False):
+        if type(value) in (tuple, list, dict):
+            value = yaml.safe_dump(value, 
+                allow_unicode=True,
+                default_flow_style=False)
+            if for_html:
+                value = value.replace(" ", unichr(160))
+        return value
+
     class Meta:
         ordering = ('-created_at',)
         verbose_name = _('submitted form')
     class Meta:
         ordering = ('-created_at',)
         verbose_name = _('submitted form')
index f9f3995..5088b1b 100644 (file)
@@ -1,10 +1,10 @@
-Wypełniono formularz {{ form_tag }} na stronie {{ site_name }}.
+{% load pretty_print from contact_tags %}Wypełniono formularz {{ form_tag }} na stronie {{ site_name }}.
 
 http://{{ site_domain }}{% url 'admin:contact_contact_change' contact.pk %}
 
 {% for k, v in contact.body.items %}
 {{ k }}:
 
 http://{{ site_domain }}{% url 'admin:contact_contact_change' contact.pk %}
 
 {% for k, v in contact.body.items %}
 {{ k }}:
-{{ v }}
+{{ v|pretty_print }}
 {% endfor %}
 {% for attachment in contact.attachment_set.all %}
 {{ attachment.tag }}:
 {% endfor %}
 {% for attachment in contact.attachment_set.all %}
 {{ attachment.tag }}:
diff --git a/contact/templatetags/__init__.py b/contact/templatetags/__init__.py
new file mode 100755 (executable)
index 0000000..e69de29
diff --git a/contact/templatetags/contact_tags.py b/contact/templatetags/contact_tags.py
new file mode 100755 (executable)
index 0000000..e84064a
--- /dev/null
@@ -0,0 +1,8 @@
+from django.template import Library
+from contact.models import Contact
+
+register = Library()
+
+@register.filter
+def pretty_print(value):
+    return Contact.pretty_print(value)
index 3db2e26..cf1dfa8 100644 (file)
@@ -30,3 +30,4 @@ django-haystack>=2.0,<2.1
 pysolr>=3,<4
 
 sorl-thumbnail>=11,<12
 pysolr>=3,<4
 
 sorl-thumbnail>=11,<12
+pyyaml