diff --git a/geonode/printing/__init__.py b/geonode/printing/__init__.py
new file mode 100644
index 00000000000..792d6005489
--- /dev/null
+++ b/geonode/printing/__init__.py
@@ -0,0 +1 @@
+#
diff --git a/geonode/printing/admin.py b/geonode/printing/admin.py
new file mode 100644
index 00000000000..f98e2b43338
--- /dev/null
+++ b/geonode/printing/admin.py
@@ -0,0 +1,4 @@
+from geonode.printing.models import PrintTemplate
+from django.contrib import admin
+
+admin.site.register(PrintTemplate)
diff --git a/geonode/printing/fixtures/initial_data.json b/geonode/printing/fixtures/initial_data.json
new file mode 100644
index 00000000000..cd3a2e03e75
--- /dev/null
+++ b/geonode/printing/fixtures/initial_data.json
@@ -0,0 +1 @@
+[{"pk": 1, "model": "printing.printtemplate", "fields": {"contents": "\r\n
{{ map_title }}
\r\n \r\n {{ map_html|safe }}\r\n
\r\n\r\n", "title": "Basic"}}]
diff --git a/geonode/printing/models.py b/geonode/printing/models.py
new file mode 100644
index 00000000000..6875d51d869
--- /dev/null
+++ b/geonode/printing/models.py
@@ -0,0 +1,12 @@
+from django.db import models
+from django.utils.translation import ugettext as _
+
+class PrintTemplate(models.Model):
+ """A template suitable for interpolation that can be printed with a map"""
+
+ title = models.CharField(_('Title'), max_length=30)
+ contents = models.TextField(_('Contents'))
+
+ def __unicode__(self):
+ return self.title
+
diff --git a/geonode/printing/urls.py b/geonode/printing/urls.py
new file mode 100644
index 00000000000..f3b7fd8c270
--- /dev/null
+++ b/geonode/printing/urls.py
@@ -0,0 +1,5 @@
+from django.conf.urls.defaults import patterns, url
+
+urlpatterns = patterns('geonode.printing.views',
+ url(r'^template/(?P\d+)$', 'template_view', name='template_view'),
+)
diff --git a/geonode/printing/views.py b/geonode/printing/views.py
new file mode 100644
index 00000000000..842f43b0b61
--- /dev/null
+++ b/geonode/printing/views.py
@@ -0,0 +1,15 @@
+from django.http import HttpResponse
+from django.shortcuts import get_object_or_404
+from django.template import Context
+from django.template import Template
+from geonode.printing.models import PrintTemplate
+
+
+def template_view(request, templateid):
+ """interpolate the template with the given id"""
+
+ template_obj = get_object_or_404(PrintTemplate, pk=templateid)
+ template = Template(template_obj.contents)
+ context = Context(request.GET)
+ rendered = template.render(context)
+ return HttpResponse(rendered, content_type="text/html")
diff --git a/geonode/settings.py b/geonode/settings.py
index 6105078b0e0..43af04b84d5 100644
--- a/geonode/settings.py
+++ b/geonode/settings.py
@@ -122,6 +122,7 @@
'geonode.maps',
'geonode.layers',
'geonode.people',
+ 'geonode.printing',
'geonode.proxy',
'geonode.security',
)
diff --git a/geonode/urls.py b/geonode/urls.py
index 336290fda11..dd7b6e8e49c 100644
--- a/geonode/urls.py
+++ b/geonode/urls.py
@@ -50,6 +50,9 @@
(r'^people/', include('geonode.people.urls')),
(r'^avatar/', include('avatar.urls')),
+ # Printing
+ (r'^printing/', include('geonode.printing.urls')),
+
# Meta
url(r'^lang\.js$', 'django.views.generic.simple.direct_to_template',
{'template': 'lang.js', 'mimetype': 'text/javascript'}, name='lang'),