css - GAE Django 表记录分页?

标签 css django google-app-engine templates

有人对如何在 Google App Engine django 模板上显示带分页的 Google Datastore 记录表有建议或示例吗?类似于 Gmail 分页。

最佳答案

我今天写了这门课:)

class gaePaginator ():
    leftPages           = 3
    rightPages          = 3
    centerPages         = 1
    totalPages          = 1
    baseURL             = 'http://example.com/%s/'
    moveLeft            = '<'
    moveLeftmax         = '<<'
    moveRight           = '>'
    moveRightmax        = '>>'
    href                = '<a href="%s">%s</a>'
    currentPageWrap     = '<b>%s</b>'
    textBetween         = '...'
    separator           = ' '
    currentPage         = 1


    """
    Ranges for current page
    """
    def leftRange(self):
        return range(1, self.leftPages+1)
    def rightRange(self):
        return range (self.totalPages - self.rightPages+1, self.totalPages + 1)
    def centerRange(self):
        return range(self.currentPage - self.centerPages, self.currentPage + self.centerPages + 1)

    def renderLeftNav(self):
        """
        Method render left page nav tab like <<(move to first page) <(move to previous page).
        """
        result = []
        if self.currentPage <= 1  or self.currentPage > self.totalPages:
            # draw nothing
            pass
        elif self.currentPage == 2:
            #draw only arrow for previous page
            arrow = self.href % (self.baseURL % 1, self.moveLeft)
            result.append(arrow)
        else:
            #draw arrow for previous page and first page
            arrow = self.href % (self.baseURL % 1, self.moveLeftmax)
            result.append(arrow)
            arrow = self.href % (self.baseURL % (self.currentPage - 1), self.moveLeft)
            result.append(arrow)
        return self.separator.join(result)

    def renderRightNav(self):
        """
        Method render left page nav tab like "<<(move to first page) <(move to previous page)"
        """
        result = []
        if self.currentPage >= self.totalPages or self.currentPage < 1:
            #draw nothing
            pass
        elif self.currentPage == self.totalPages - 1:
            #draw only arrow for next page
            arrow = self.href % (self.baseURL % self.totalPages, self.moveRight)
            result.append(arrow)
        else:
            #draw arrow for next page and for last page
            arrow = self.href % (self.baseURL % (self.currentPage + 1), self.moveRight)
            result.append(arrow)

            arrow = self.href % (self.baseURL % self.totalPages, self.moveRightmax)
            result.append(arrow)
        return self.separator.join(result)

    def getRange (self):
        result = []
        for i in range(1, self.totalPages+1):
            if i in self.leftRange() or i in self.rightRange() or i in self.centerRange():
                result.append(i)
            else:
                if result[-1] is not None:
                    result.append(None)
        return result

    def renderPageRange (self):
        '''
        Method returns list of pages as urls in HTML representation.
        '''
        result = []
        for i in self.getRange():
            if i == self.currentPage:
                tmp = self.currentPageWrap % i
            else:
                if i is None:
                    tmp = self.textBetween
                else:
                    tmp = self.href % (self.baseURL % i, i)
            result.append(tmp)
        return self.separator.join(result)

    def asURL(self):
        '''
        Method returns list of pages as urls in HTML representation with border arrows.
        '''
        result = []
        result.append(self.renderLeftNav())
        result.append(self.renderPageRange())
        result.append(self.renderRightNav())
        return self.separator.join(result)

在 views.py 中使用:

from ....main.paginator import gaePaginator  
pages = gaePaginator ()
pages.currentPage   = pagesNumber
pages.leftPages     = 2 
pages.rightPages    = 2
pages.centerPages   = 1
pages.totalPages    = totalPagesNumber
pages.baseURL       = 'page/%s'
pages.separator     = '&nbsp;&nbsp;'
result = {'pages'         : pages.asURL(),}

在模板中使用:

{{ pages }}

结果你会收到: 十页,

当前页面是 1 : 1 2 ... 9 10 >>>

当前页面是 4 : <<< 1 2 3 4 5 ... 9 10 >>>

当前页面是 6 : <<< 1 2 ... 5 6 7 ... 9 10 >>>

当前页面是 10:<<< 1 2 ... 9 10

<< - moves to first page
< - moves to previous page
> - moves to next page
>> - move to last page

此外,此代码会尝试为任何情况绘制页面:例如,如果用户将设置页码 = -1 或 100000,将呈现“1 2 ... 9 10”。

它也可以用在django Paginator之类的模板中,但我没有尝试这样做。

关于css - GAE Django 表记录分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2411617/

相关文章:

javascript - 在选择选项中对齐两个词

jquery - 将文本交换动画从悬停更改为定时

jquery - 边缘顶部 :0 starts at top of screen but keeps changing position to unspecified value

django - 使用 render_to_response 传递 URL 参数

python - Django:使用 `._meta.get_fields()` 时如何排除相关字段?

java - 从 GAE/J 调用 SOAP 服务

html - 使 CSS 网格单元图像项使用所有可用空间

python - 在 Django 管理中显示 json 字段

google-app-engine - 为什么 "gcloud init"创建 "default/"目录?

python - 如何处理这个Gql查询对象