您的位置:首页 > 编程语言 > Go语言

Django 中如何针对自定义的 View 做分页显示

2014-10-30 13:51 477 查看
分类: Python
http://blog.csdn.net/inelm/article/details/4612956
2007-03-06 13:18 355人阅读 评论(0) 收藏 举报

djangonumberstagssluggooglelist

参考:http://www.obeattie.com/blog/posts/custom-view-pagination-django/
http://www.djangoproject.com/documentation/models/pagination/

在上述链接的资料中,核心的分页逻辑代码如下:

# demo Model
class Tag(models.Model):

    name = models.CharField('Tag Name', maxlength=200)

    slug = models.SlugField(prepopulate_from=('name', ))

    def __str__(self):

        return self.name

from django.core.paginator import ObjectPaginator, InvalidPage

# demo View
def tag_list(request):

    tags = Tag.objects.order_by('name')

    paginator = ObjectPaginator(tags, 5)

    try: 

        page = int(request.GET.get('page', '1'))

        tags = paginator.get_page(page - 1)

    except InvalidPage: 

        raise http.Http404

    return shortcuts.render_to_response("tag_list.html", { 

    'paginator': paginator,

    'tags': tags,

    'is_paginated': paginator.pages > 1,

    'has_next': paginator.has_next_page(page - 1),

    'has_previous': paginator.has_previous_page(page - 1),

    'current_page': page,

    'next_page': page + 1,

    'previous_page': page - 1,

    'pages': paginator.pages,

    'hits' : paginator.hits,

    }, 

    context_instance = RequestContext(request))

参考以上代码,为了配合这个 view, 我写了个简单的 template 显示分页链接:

                {% if is_paginated %}

                    {% ifequal current_page 1 %}|< 

                    {% else %} <a href="?page=1">|<</a>

                    {% endifequal %}

                    {% if has_previous %} <a href="?page={{ previous_page }}"><<</a>

                    {% else %} <<

                    {% endif %}

                    {% for p in page_numbers %}

                        <a href="?page={{ p }}">{{ p }}</a>

                    {% endfor %}

                    {% if has_next %}<a href="?page={{ next_page }}">>></a>

                    {% else %}>>

                    {% endif %}

                    {% ifequal current_page pages %}>|

                    {% else %} <a href="?page={{ pages }}">>|</a>

                    {% endifequal %}

                      

                    当前页:{{ current_page }}/{{ pages }}

                      

                {% endif %}              

                共{{ hits }}个话题

另外,为了在模板中输出所有页码的链接,我给 render_to_response 的 context 字典变量增加了一个值:

'page_numbers': range(paginator.pages+1)[1:],

这样,一个功能齐全的分页代码就完成了。当然还可以在这个基础上修改一下,加入其他高级的分页功能。比如像 google 那样每次只显示10页页码的方式;下拉框选择页码;或输入数字跳转页码等。这些我想等有需要的时候再去试验了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: