diff --git a/django/contrib/admin/media/css/forms.css b/django/contrib/admin/media/css/forms.css
index 468e06a8a2..01a2937b7b 100644
--- a/django/contrib/admin/media/css/forms.css
+++ b/django/contrib/admin/media/css/forms.css
@@ -57,4 +57,13 @@ fieldset.monospace textarea { font-family:"Bitstream Vera Sans Mono",Monaco,"Cou
.vURLField { width:30em; }
.vLargeTextField, .vXMLLargeTextField { width:48em; }
.flatpages-flatpage #id_content { height:40.2em; }
-.module table .vPositiveSmallIntegerField { width:2.2em; }
\ No newline at end of file
+.module table .vPositiveSmallIntegerField { width:2.2em; }
+
+
+/* PAGINATOR */
+.paginator { padding: .25em .25em .6em .25em; }
+.paginate-pages { padding: 2px 3px; border: 1px solid #ddd; cursor: pointer; text-decoration: underline; }
+.paginate-first, .paginate-last { padding: 2px 6px; border: 1px solid #ddd; font-weight: bold; }
+.paginate-previous, .paginate-next { padding: 2px 3px; border: 1px solid #ddd; }
+.paginate-link { padding: 2px 4px; border: 1px solid #ddd; }
+.paginate-current { padding: 2px 4px; border: 1px solid #ddd; font-weight: bold; background:#417690; color:#f4f379; }
\ No newline at end of file
diff --git a/django/contrib/admin/templates/admin/paginator.html b/django/contrib/admin/templates/admin/paginator.html
new file mode 100644
index 0000000000..707dadc3b3
--- /dev/null
+++ b/django/contrib/admin/templates/admin/paginator.html
@@ -0,0 +1,13 @@
+{% spaceless %}
+{% if show_first %}«{% endif %}
+{% if has_previous %}<{% endif %}
+{% for num in page_numbers %}
+ {% ifequal num page %}
+ {{ num }}
+ {% else %}
+ {{ num }}
+ {% endifequal %}
+{% endfor %}
+{% if has_next %}>{% endif %}
+{% if show_last %}»{% endif %}
+{% endspaceless %}
\ No newline at end of file
diff --git a/django/contrib/admin/templates/admin/row_level_permission.html b/django/contrib/admin/templates/admin/row_level_permission.html
index 354108d66e..ee9f94c911 100644
--- a/django/contrib/admin/templates/admin/row_level_permission.html
+++ b/django/contrib/admin/templates/admin/row_level_permission.html
@@ -135,7 +135,10 @@
{% if is_paginated %}
+{% comment %}
{% if has_previous %} << {% endif %} {% if has_next %} >> {% endif %}
+{% endcomment %}
+ {% paginator %}
|
{% endif %}
diff --git a/django/contrib/admin/templatetags/row_level_permission.py b/django/contrib/admin/templatetags/row_level_permission.py
index edbd6e09a0..29f435a280 100644
--- a/django/contrib/admin/templatetags/row_level_permission.py
+++ b/django/contrib/admin/templatetags/row_level_permission.py
@@ -34,4 +34,27 @@ def objref(parser, token):
tok = "object"
return objref_class(tok)
+def paginator(context, adjacent_pages=2):
+ """Adds pagination context variables for first, adjacent and next page links
+ in addition to those already populated by the object_list generic view."""
+ page_numbers = [n for n in \
+ range(context["page"] - adjacent_pages, context["page"] + adjacent_pages + 1) \
+ if n > 0 and n <= context["pages"]]
+ print page_numbers
+ return {
+ "hits": context["hits"],
+ "results_per_page": context["results_per_page"],
+ "page": context["page"],
+ "pages": context["pages"],
+ "page_numbers": page_numbers,
+ "next": context["next"],
+ "previous": context["previous"],
+ "has_next": context["has_next"],
+ "has_previous": context["has_previous"],
+ "show_first": 1 not in page_numbers,
+ "show_last": context["pages"] not in page_numbers,
+ }
+
+register.inclusion_tag("admin/paginator.html", takes_context=True)(paginator)
+
register.tag('objref', objref)
\ No newline at end of file
diff --git a/django/contrib/admin/views/row_level_permissions.py b/django/contrib/admin/views/row_level_permissions.py
index 40154780e8..f3ecf0f93a 100644
--- a/django/contrib/admin/views/row_level_permissions.py
+++ b/django/contrib/admin/views/row_level_permissions.py
@@ -29,12 +29,7 @@ def view_row_level_permissions(request, app_label, model_name, object_id):
if not request.user.has_perm(RowLevelPermission._meta.app_label + '.' + RowLevelPermission._meta.get_change_permission()):
raise PermissionDenied
- #TODO: For now takes the number per page from the model instance not the RLP object
- paginator = ObjectPaginator(model_instance.row_level_permissions.order_by('owner_ct', 'owner_id'),
- opts.admin.list_per_page)
-
- page = int(request.GET.get('page', 0))
- rlp_list = paginator.get_page(page)
+
c = template.RequestContext(request, {
'title': _('Edit Row Level Permissions'),
@@ -42,13 +37,30 @@ def view_row_level_permissions(request, app_label, model_name, object_id):
'content_type_id':model_ct.id,
'original': model_instance,
'opts':opts,
+ })
+
+
+ #TODO: For now takes the number per page from the model instance not the RLP object
+ list_per_page = opts.admin.list_per_page
+ #list_per_page = 5
+ paginator = ObjectPaginator(model_instance.row_level_permissions.order_by('owner_ct', 'owner_id'),
+ list_per_page)
+ page = int(request.GET.get('page', 1))-1
+ rlp_list = paginator.get_page(page)
+ paginator_context = {
"is_paginated": paginator.has_next_page(0),
"has_next": paginator.has_next_page(page),
"has_previous": paginator.has_previous_page(page),
- "page": page + 1,
- "next": page + 1,
- "previous": page - 1,
- })
+ "page": page+1,
+ "next": page+2,
+ "previous": page,
+ "hits":paginator.hits,
+ "results_per_page":list_per_page,
+ "pages":paginator.pages,
+ "has_next":paginator.has_next_page(page),
+ "has_previous":paginator.has_previous_page(page),
+ }
+ c.update(paginator_context)
rlp_errors = rlp_new_data = {}
add_rlp_manip = AddRLPManipulator(model_instance, model_ct)