本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7594290
建立时间:2006年5月29日




[Django]Django 中如何针对自定义的 View 做分页显示
软件技术

lhwork 发表于 2007/3/14 9:21:38

参考:http://www.obeattie.com/blog/posts/custom-view-pagination-django/http://www.djangoproject.com/documentation/models/pagination/在上述链接的资料中,核心的分页逻辑代码如下: # demo Modelclass Tag(models.Model):    name = models.CharField('Tag Name', maxlength=200)    slug = models.SlugField(prepopulate_from=('name', ))    def __str__(self):        return self.namefrom django.core.paginator import ObjectPaginator, InvalidPage# demo Viewdef 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 显示分页链接: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->                {% if is_paginated %}                    {% ifequal current_page 1 %}|&lt;                     {% else %} <a href="?page=1">|&lt;</a>                    {% endifequal %}                    {% if has_previous %} <a href="?page={{ previous_page }}">&lt;&lt;</a>                    {% else %} &lt;&lt;                    {% endif %}                    {% for p in page_numbers %}                        <a href="?page={{ p }}">{{ p }}</a>                    {% endfor %}                    {% if has_next %}<a href="?page={{ next_page }}">&gt;&gt;</a>                    {% else %}&gt;&gt;                    {% endif %}                    {% ifequal current_page pages %}&gt;|                    {% else %} <a href="?page={{ pages }}">&gt;|</a>                    {% endifequal %}                    &nbsp;&nbsp;                    当前页:{{ current_page }}/{{ pages }}                    &nbsp;&nbsp;                {% endif %}                              共{{ hits }}个话题另外,为了在模板中输出所有页码的链接,我给 render_to_response 的 context 字典变量增加了一个值: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->'page_numbers': range(paginator.pages+1)[1:],这样,一个功能齐全的分页代码就完成了。当然还可以在这个基础上修改一下,加入其他高级的分页功能。比如像 google 那样每次只显示10页页码的方式;下拉框选择页码;或输入数字跳转页码等。这些我想等有需要的时候再去试验了。


阅读全文(8420) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.359 second(s), page refreshed 144765881 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号