From 0286981a64802f5cea0ac8473a360e9635b005a3 Mon Sep 17 00:00:00 2001 From: Radek Czajka Date: Tue, 8 Oct 2013 11:19:18 +0200 Subject: [PATCH] Display structs in contact form nicely. --- contact/admin.py | 4 ++-- contact/models.py | 11 +++++++++++ contact/templates/contact/mail_managers_body.txt | 4 ++-- contact/templatetags/__init__.py | 0 contact/templatetags/contact_tags.py | 8 ++++++++ requirements.txt | 1 + 6 files changed, 24 insertions(+), 4 deletions(-) create mode 100755 contact/templatetags/__init__.py create mode 100755 contact/templatetags/contact_tags.py diff --git a/contact/admin.py b/contact/admin.py index ee1623d..33b1963 100644 --- a/contact/admin.py +++ b/contact/admin.py @@ -29,7 +29,7 @@ class ContactAdmin(admin.ModelAdmin): 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_'): @@ -75,7 +75,7 @@ class ContactAdmin(admin.ModelAdmin): # 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) diff --git a/contact/models.py b/contact/models.py index 21d8405..6b33d29 100644 --- a/contact/models.py +++ b/contact/models.py @@ -1,4 +1,5 @@ # -*- 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 _ @@ -13,6 +14,16 @@ class Contact(models.Model): 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') diff --git a/contact/templates/contact/mail_managers_body.txt b/contact/templates/contact/mail_managers_body.txt index f9f3995..5088b1b 100644 --- a/contact/templates/contact/mail_managers_body.txt +++ b/contact/templates/contact/mail_managers_body.txt @@ -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 }}: -{{ v }} +{{ v|pretty_print }} {% 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 index 0000000..e69de29 diff --git a/contact/templatetags/contact_tags.py b/contact/templatetags/contact_tags.py new file mode 100755 index 0000000..e84064a --- /dev/null +++ b/contact/templatetags/contact_tags.py @@ -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) diff --git a/requirements.txt b/requirements.txt index 3db2e26..cf1dfa8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -30,3 +30,4 @@ django-haystack>=2.0,<2.1 pysolr>=3,<4 sorl-thumbnail>=11,<12 +pyyaml -- 2.20.1