diff --git a/ckan/templates/macros/form.html b/ckan/templates/macros/form.html
index 4f8be1f4705..ee36b6b3a06 100644
--- a/ckan/templates/macros/form.html
+++ b/ckan/templates/macros/form.html
@@ -296,3 +296,38 @@
{{ " " }}{{ key }}{% if value != "" %}="{{ value }}"{% endif %}
{%- endfor -%}
{%- endmacro -%}
+
+{%- macro autoform(form_info=[], data={}, errors={}) -%}
+ {% for item in form_info %}
+ {% set name = item.name %}
+ {% set value = data.get(name) %}
+ {% set error = errors.get(name) %}
+ {% set id = 'field-%s' % name %}
+
+ {% set control = item.control or 'input' %}
+ {% set label = item.label %}
+ {% set placeholder = item.placeholder %}
+
+ {% set classes = item.classes %}
+
+ {% if control == 'input' %}
+
+ {{ input(name, id=id, label=label, placeholder=placeholder, value=value, error=error, classes=classes or ['control-medium']) }}
+
+ {% elif control == 'select' %}
+
+ {% set options = item.options %}
+ {{ select(name, id=id, label=label, options=options, selected=value, error=error) }}
+
+ {% elif control == 'markdown' %}
+
+ {{ markdown(name, id=id, label=label, placeholder=placeholder, value=value, error=error) }}
+
+ {% elif control == 'plain_textarea' %}
+
+ {{ plain_textarea(name, id=id, label=label, placeholder=placeholder, value=value, error=error) }}
+
+ {% endif %}
+
+ {% endfor %}
+{%- endmacro -%}