diff --git a/layerindex/index.html b/layerindex/index.html
index 34a623d..a294c4f 100644
--- a/layerindex/index.html
+++ b/layerindex/index.html
@@ -99,27 +99,8 @@
{% if is_paginated %}
-
+ {% load pagination %}
+ {% pagination page_obj %}
{% endif %}
{% else %}
No matching layers in database.
diff --git a/layerindex/recipes.html b/layerindex/recipes.html
index 72021b0..9683998 100644
--- a/layerindex/recipes.html
+++ b/layerindex/recipes.html
@@ -62,27 +62,8 @@
{% if is_paginated %}
-
+ {% load pagination %}
+ {% pagination page_obj %}
{% endif %}
{% else %}
{% if search_keyword %}
diff --git a/layerindex/templatetags/__init__.py b/layerindex/templatetags/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/layerindex/templatetags/addurlparameter.py b/layerindex/templatetags/addurlparameter.py
new file mode 100644
index 0000000..58a454a
--- /dev/null
+++ b/layerindex/templatetags/addurlparameter.py
@@ -0,0 +1,29 @@
+# Borrowed from http://djangosnippets.org/snippets/361/
+# Original author: johan de taeye
+# With modifications from Ludwik Trammer
+#
+# Adds GET parameters to the current URL
+
+from django.template import Library, Node, resolve_variable, TemplateSyntaxError, Variable
+
+register = Library()
+
+class AddParameter(Node):
+ def __init__(self, varname, value):
+ self.varname = Variable(varname)
+ self.value = Variable(value)
+
+ def render(self, context):
+ req = Variable('request').resolve(context)
+ params = req.GET.copy()
+ params[self.varname.resolve(context)] = self.value.resolve(context)
+ return '%s?%s' % (req.path, params.urlencode())
+
+def addurlparameter(parser, token):
+ from re import split
+ bits = split(r'\s+', token.contents, 2)
+ if len(bits) < 2:
+ raise TemplateSyntaxError, "'%s' tag requires two arguments" % bits[0]
+ return AddParameter(bits[1],bits[2])
+
+register.tag('addurlparameter', addurlparameter)
diff --git a/layerindex/templatetags/pagination.py b/layerindex/templatetags/pagination.py
new file mode 100644
index 0000000..aa3175f
--- /dev/null
+++ b/layerindex/templatetags/pagination.py
@@ -0,0 +1,52 @@
+# Borrowed from http://djangosnippets.org/snippets/2199/
+#
+# Digg-like page numbering using inclusion tag
+
+from django import template
+
+register = template.Library()
+
+@register.inclusion_tag('pagination.html', takes_context=True)
+def pagination(context, page, begin_pages=2, end_pages=2, before_current_pages=4, after_current_pages=4):
+ # Digg-like pages
+ before = max(page.number - before_current_pages - 1, 0)
+ after = page.number + after_current_pages
+
+ begin = page.paginator.page_range[:begin_pages]
+ middle = page.paginator.page_range[before:after]
+ end = page.paginator.page_range[-end_pages:]
+ last_page_number = end[-1]
+
+ def collides(firstlist, secondlist):
+ """ Returns true if lists collides (have same entries)
+
+ >>> collides([1,2,3,4],[3,4,5,6,7])
+ True
+ >>> collides([1,2,3,4],[5,6,7])
+ False
+ """
+ return any(item in secondlist for item in firstlist)
+
+ # If middle and end has same entries, then end is what we want
+ if collides(middle, end):
+ end = range(max(page.number-before_current_pages, 1), last_page_number+1)
+
+ middle = []
+
+ # If begin and middle ranges has same entries, then begin is what we want
+ if collides(begin, middle):
+ begin = range(1, min(page.number + after_current_pages, last_page_number)+1)
+
+ middle = []
+
+ # If begin and end has same entries then begin is what we want
+ if collides(begin, end):
+ begin = range(1, last_page_number+1)
+ end = []
+
+ context.update({'page' : page,
+ 'begin' : begin,
+ 'middle' : middle,
+ 'end' : end})
+
+ return context
diff --git a/pagination.html b/pagination.html
new file mode 100644
index 0000000..4e08cb7
--- /dev/null
+++ b/pagination.html
@@ -0,0 +1,57 @@
+{% comment %}
+
+ layerindex-web - pagination template
+
+ Copyright (C) 2013 Intel Corporation
+ Licensed under the MIT license, see COPYING.MIT for details
+
+{% endcomment %}
+
+{% load addurlparameter %}
+
+
diff --git a/settings.py b/settings.py
index 53dac13..f5c154d 100644
--- a/settings.py
+++ b/settings.py
@@ -108,6 +108,11 @@ MIDDLEWARE_CLASSES = (
'reversion.middleware.RevisionMiddleware',
)
+from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP
+TEMPLATE_CONTEXT_PROCESSORS = TCP + (
+ 'django.core.context_processors.request',
+)
+
ROOT_URLCONF = 'urls'
TEMPLATE_DIRS = (