Eb74aac8da41a993ae9dd91a5b13b78a

Really quickly ported some PHP code to Python to support digg style pagination. only problem is it is pretty awful. Can anyone give a quick hint to make this look better

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def segment_pages(page):
    page.paginator.left = []
    page.paginator.right = []
    page.paginator.middle = []
    segment = 4
    adjacents = 3
    p = 1
    
    if page.paginator.num_pages > 1:
        if page.paginator.num_pages < 7 + (adjacents * 2):
            page.paginator.left = range(1, page.paginator.num_pages + 1)
        if page.paginator.num_pages >= 7 + (adjacents * 2):
            if page.number < 1 + (adjacents * 3):
                page.paginator.left = range(1, 5 + (adjacents * 2))
                page.paginator.right = range(page.paginator.num_pages - adjacents, page.paginator.num_pages + 1)
            elif page.paginator.num_pages - (adjacents * 2) > page.number and page.number > (adjacents * 2):
                page.paginator.left = range(1, 1 + adjacents)
                page.paginator.middle = range(page.number - adjacents, page.number + (adjacents+1))
                page.paginator.right = range(page.paginator.num_pages - adjacents, page.paginator.num_pages + 1)
            else:
                page.paginator.left = range(1, adjacents)
                page.paginator.right = range(page.paginator.num_pages - (1 + adjacents * 3), page.paginator.num_pages + 1)
    return page

Refactorings

No refactoring yet !

Ae6e94b88e9fce8c14d63640aad14946

Michael

June 26, 2008, June 26, 2008 20:08, permalink

No rating. Login to rate!

I've written a digg-like paginator a while back:

http://www.djangosnippets.org/snippets/773/

Your refactoring





Format Copy from initial code

or Cancel