Snippets
Created by
Valberto Carneiro
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | # -*- coding: utf-8 -*-
from django import template
from django.utils.html import escapejs, format_html
from django.utils.safestring import mark_safe
from django.contrib.admin.views.main import (
ALL_VAR, ORDER_VAR, PAGE_VAR, SEARCH_VAR,
)
register = template.Library()
DOT = '.'
FIRST_ICON = 'angle double left'
PREVIOUS_ICON = 'angle left'
NEXT_ICON = 'angle right'
LAST_ICON = 'angle double right'
DISABLED_ICON_ITEM = '<div class="disabled item"><i class="{} icon"></i></div>'
LINK_ICON_ITEM = '<a href="{}" class="item"><i class="{} icon"></i></a>'
DOTS_ITEM = '<div class="disabled item">...</div>'
ACTIVE_ITEM = '<div class="item active">{}</div>'
LINK_ITEM = '<a href="{}" class="item">{}</a> '
'''
Usage:
- in pagination.html template:
{% load paginator %}
...
{% first_link cl %}
{% previous_link cl %}
{% if pagination_required %}
{% for i in page_range %}
{% paginator_number cl i %}
{% endfor %}
{% endif %}
{% next_link cl %}
{% last_link cl %}
...
'''
def paginator_link(cl, criteria, icon, page):
'''
Generates html for a disabled item or a link item
'''
if cl.page_num == criteria:
return format_html(DISABLED_ICON_ITEM, mark_safe(icon))
else:
return format_html(LINK_ICON_ITEM,
cl.get_query_string({PAGE_VAR: page}),
mark_safe(icon))
@register.simple_tag
def first_link(cl):
'''
Defines link with icon to first page
'''
criteria = 0
icon = FIRST_ICON
page = 0
return paginator_link(cl, criteria, icon, page)
@register.simple_tag
def previous_link(cl):
'''
Defines link with icon to previous page
'''
criteria = 0
icon = PREVIOUS_ICON
page = cl.page_num - 1
return paginator_link(cl, criteria, icon, page)
@register.simple_tag
def next_link(cl):
'''
Defines link with icon to next page
'''
criteria = cl.paginator.num_pages - 1
icon = NEXT_ICON
page = cl.page_num + 1
return paginator_link(cl, criteria, icon, page)
@register.simple_tag
def last_link(cl):
'''
Defines link with icon to last page
'''
criteria = cl.paginator.num_pages - 1
icon = LAST_ICON
page = cl.paginator.num_pages - 1
return paginator_link(cl, criteria, icon, page)
@register.simple_tag
def paginator_number(cl, i):
"""
Generates an individual page index link in a paginated list.
"""
if i == DOT:
return format_html(DOTS_ITEM)
elif i == cl.page_num:
return format_html(ACTIVE_ITEM, i + 1)
else:
return format_html(LINK_ITEM,
cl.get_query_string({PAGE_VAR: i}),
i + 1)
|
Comments (0)
You can clone a snippet to your computer for local editing. Learn more.