diff --git a/tailbone/forms/core.py b/tailbone/forms/core.py
index f4fa79e4..beae42a4 100644
--- a/tailbone/forms/core.py
+++ b/tailbone/forms/core.py
@@ -1043,9 +1043,17 @@ class Form(object):
if field_type:
attrs['type'] = field_type
if messages:
- attrs[':message'] = '[{}]'.format(', '.join([
- "'{}'".format(msg.replace("'", r"\'"))
- for msg in messages]))
+ if len(messages) == 1:
+ msg = messages[0]
+ if msg.startswith('`') and msg.endswith('`'):
+ attrs[':message'] = msg
+ else:
+ attrs['message'] = msg
+ else:
+ # nb. must pass an array as JSON string
+ attrs[':message'] = '[{}]'.format(', '.join([
+ "'{}'".format(msg.replace("'", r"\'"))
+ for msg in messages]))
# merge anything caller provided
attrs.update(bfield_attrs)
diff --git a/tailbone/grids/core.py b/tailbone/grids/core.py
index 41d75fc2..b428aaa6 100644
--- a/tailbone/grids/core.py
+++ b/tailbone/grids/core.py
@@ -1374,6 +1374,7 @@ class Grid(object):
"""
context = dict(kwargs)
context['grid'] = self
+ context['request'] = self.request
context['data_prop'] = data_prop
context['empty_labels'] = empty_labels
if 'grid_columns' not in context:
diff --git a/tailbone/static/css/layout.css b/tailbone/static/css/layout.css
index 0761d001..ef5c5352 100644
--- a/tailbone/static/css/layout.css
+++ b/tailbone/static/css/layout.css
@@ -90,6 +90,11 @@ header span.header-text {
* "object helper" panel
******************************/
+.object-helpers .panel {
+ margin: 1rem;
+ margin-bottom: 1.5rem;
+}
+
.object-helpers .panel-heading {
white-space: nowrap;
}
diff --git a/tailbone/templates/forms/deform.mako b/tailbone/templates/forms/deform.mako
index db63a424..8a940347 100644
--- a/tailbone/templates/forms/deform.mako
+++ b/tailbone/templates/forms/deform.mako
@@ -55,12 +55,16 @@
% if form.auto_disable_save or form.auto_disable: