为四川人民祈祷! www.onefoundation.cn
logo of kjam.org
Archive: 2008-5

Django Pagination

新翻译完成的 Django Pagination, djangodoccn虽然进度很慢, 但是还是 keep going.


分页系统

Django 开发版本新加入

Django 为需要分页的数据提供了一些类. 具体说就是那些, 需要被分成若干页的数据, 通常有 "上一页/下一页" 的超链接. 这些类被放在 django/core/paginator.py 模块文件里.

示范

Paginator 传入一个对象列表, 以及每页需要显示的数量, 然后对象就可以告诉你分页后的数据:

>>> from django.core.paginator import Paginator
>>> objects = ['john', 'paul', 'george', 'ringo']
>>> p = Paginator(objects, 2)

>>> p.count 4 >>> p.num_pages 2 >>> p.page_range [1, 2]
>>> page1 = p.page(1) >>> page1 >>> page1.object_list ['john', 'paul']
>>> page2 = p.page(2) >>> page2.object_list ['george', 'ringo'] >>> page2.has_next() False >>> page2.has_previous() True >>> page2.has_other_pages() True >>> page2.next_page_number() 3 >>> page2.previous_page_number() 1 >>> page2.start_index() # The 1-based index of the first item on this page 3 >>> page2.end_index() # The 1-based index of the last item on this page 4
>>> p.page(0) Traceback (most recent call last): ... InvalidPage >>> p.page(3) Traceback (most recent call last): ... InvalidPage

Paginator 对象

方法

page(number) -- 传入一个的页码(从1开始), 返回对应的 Page 对象. 如果所给的参数不存在(越界)就会抛出 InvalidPage 异常.

属性

count -- 对象总数, 包括所有页面.

num_pages -- 总页码数.

page_range -- 从1开始的页码, 例如, [1, 2, 3, 4].

Page 对象

方法

has_next() -- 如果有下一页, 返回 True.

has_previous() -- 如果有上一页, 返回 True.

has_other_pages() -- 如果不是第一页也不是最后一页, 返回 True.

next_page_number() -- 返回下一页的页码. 请注意此方法有些 "愚蠢", 不管接下来的页码是否存在都会返回一个数字.

previous_page_number() -- 返回上一页的页码. 请注意此方法有些 "愚蠢", 不管接下来的页码是否存在都会返回一个数字.

start_index() -- 返回当前页面对象列表中最开始对象的序号(从1开始), 相对于页码对象列表中的元素. 例如, 当页码对象列表中一共有5个对象, 并且设定每页对象个数为2, 则第二个page对象的 start_index() 方法返回 3.

end_index() -- 返回当前页面对象列表中最后对象的序号(从1开始), 相对于页码对象列表中的元素. 例如, 当页码对象列表中一共有5个对象, 并且设定每页对象个数为2, 则第二个page对象的 end_index() 方法返回 4.

属性

object_list -- 当前页面对象上对应的元素列表.

number -- 当前对象的页码(从1开始).

paginator -- 指向对应的 Paginator 对象.

QuerySetPaginator 对象

如果使用 Django 数据库 API 中的 QuerySet``的话, 请使用 ``QuerySetPaginator 来代替 Paginator. 这会提高效率, 并且这两个类在 API 上并不存在任何差异.

之前的 ObjectPaginator

PaginatorPage 类是在 Django 开发版本新加入的(版本 7306). 在此之前的版本中, Django 提供了provided an具有类似功能的 ObjectPaginator 类, 但是使用起来不够方便. ObjectPaginator 类仍然会被保留, 作为向后兼容. 但是当你试图使用它的时候 Django 会提示 DeprecationWarning.

comments: 0  
by kernel1983

GAE top 3 issues

看到了 Google App Engine 的 issues 列表上三个需求最多的 features
1559  please add java or groovy support
1079  PHP support is a must
1070  Please add ruby support

语言之争永远是大多数开发者们的热门话题.
当然, GAE 是没有操作系统方面的问题, 否则一定也会很热门.

在 PHP 的支持者里, 还看到了唯一一个用中文提问的 kafeifei. 真有才啊!

不过在我看来, 如果 Google 的这群上帝们答应了这些家伙的请求, GAE Team 绝对会面临一场灾难.
很多成熟的基于 PHP/Java 的产品想要 port 上去, 估计也得满头大汗了.

还是希望 GAE 早点公开放号, 让大伙都有机会享受 python 的乐趣.
comments: 0  
by kernel1983

Nexuiz

Free Game?

应该说, 不要钱的游戏还是很多的, 不过 Nexuiz 还是比较特别的. 三百多M的zip下载玩之后解压, 无论你在用什么系统(OS X, Linux 或者 Windows), 居然都可以直接运行.

游戏是 3D 类死亡竞赛游戏, FPS. 自从大学里玩 CS 的那个时代以后, 再也没有碰过这玩意.

zip包中还带有这个游戏引擎 DarkPlaces的源代码, 全部 C 语言写成, 编译也超级简单. Linux 和 OS X 只需要 make 就可以了, Windows可以选择的 IDE 有 Visual Studio 和 DevCpp(推荐这个, 免费的 mingw IDE). 当然由于有 makefile, 导入到 Eclipse 应该也不会很麻烦.
comments: 0  
by kernel1983

让我们为四川人民祈祷!

让我们为四川人民祈祷!

那么多小孩子阿, 真可怜. 希望能救活更多的人.


发现一个可以在线捐款的地方:
www.onefoundation.cn 支持支付宝, 财付通以及 Firefox 可以用的 Paypal.
comments: 0  
by kernel1983

Let's dream of a day without flash and java applet

我预感, 或许有一天我们可以把Flash, Java Applet 还有该死的 Internet Explorer 一起丢到 Trash 里面去

为了实现这一个伟大的梦想, 我要给朋友们看两个links
http://developer.mozilla.org/en/docs/HTML:Canvas
http://ejohn.org/blog/processingjs/

第一个比较重要一点, Firefox为我们带来的惊喜. 我们可以在 Firefox 中直接使用 JS 画出图形.

一直以来, 浏览器天生缺乏这方面的功能, 只能以插件方式来实现(Flash和Java Apple, 对了还有 ActiveX ). Gecko 1.8 引擎(Firefox 1.5)的开始支持 canvas标签, Webkit 也有支持(就是 Safari, 测试过), 据说最新 Opera 也支持.

第二个link是 jQuery 作者的一篇 blog post, 他做了一件很酷的事情, 就是让超级好玩的玩具 Processing 的语法可以被 JS 解释, 并且将结果显示在一个 canvas html 标签中, 不过, 看起来暂时还只能在 Firefox 中得到正确的结果.

看来最近大家都对图像多媒体比较感兴趣, 难道是最近趋势?
comments: 0  
by kernel1983
12