2
Django REST框架讓你設置分頁。 當我們提出請求時,它返回一個JSON對象,其''分頁'屬性具有包含其他頁面(如果存在)的urls的'next'和/或'previous'屬性。龍捲風可以處理分頁嗎?
Tornado是否提供設置分頁的選項?
我搜查了龍捲風分頁示例的網頁,但找不到任何。
任何幫助表示讚賞。 提前感謝您。
Django REST框架讓你設置分頁。 當我們提出請求時,它返回一個JSON對象,其''分頁'屬性具有包含其他頁面(如果存在)的urls的'next'和/或'previous'屬性。龍捲風可以處理分頁嗎?
Tornado是否提供設置分頁的選項?
我搜查了龍捲風分頁示例的網頁,但找不到任何。
任何幫助表示讚賞。 提前感謝您。
沒有,因爲分頁需要與數據庫非常密切地合作,而Tornado是數據庫不可知的。
這是我使用的UI模塊;你需要你的總結果的計數,以及結果的頁面(這不限制這些結果對你來說,如果只是建立分頁鏈接):
from __future__ import division
import math
import urlparse
import urllib
import tornado.web
def update_querystring(url, **kwargs):
base_url = urlparse.urlsplit(url)
query_args = urlparse.parse_qs(base_url.query)
query_args.update(kwargs)
for arg_name, arg_value in kwargs.iteritems():
if arg_value is None:
if query_args.has_key(arg_name):
del query_args[arg_name]
query_string = urllib.urlencode(query_args, True)
return urlparse.urlunsplit((base_url.scheme, base_url.netloc,
base_url.path, query_string, base_url.fragment))
class Paginator(tornado.web.UIModule):
"""Pagination links display."""
def render(self, page, page_size, results_count):
pages = int(math.ceil(results_count/page_size)) if results_count else 0
def get_page_url(page):
# don't allow ?page=1
if page <= 1:
page = None
return update_querystring(self.request.uri, page=page)
next = page + 1 if page < pages else None
previous = page - 1 if page > 1 else None
return self.render_string('uimodules/pagination.html', page=page, pages=pages, next=next,
previous=previous, get_page_url=get_page_url)
這裏是模塊模板(uimodules/pagination.html在上面的例子):
{% if pages > 1 %}
<div class="pagination pagination-centered">
<ul>
<li{% if previous %}><a href="{{ get_page_url(previous) }}">«</a>{% else %} class="disabled"><span>«</span></li>{% end %}
{% for page_num in xrange(1, pages + 1) %}{# 1-index range #}
<li{% if page_num != page %}><a href="{{ get_page_url(page_num) }}">{{ page_num }}</a>{% else %} class="active"><span>{{ page_num }}</span></li>{% end %}
{% end %}
<li{% if next %}><a href="{{ get_page_url(next) }}">»</a>{% else %} class="disabled"><span>»</span></li>{% end %}
</ul>
</div>
{% end %}
不要忘記tell your tornado app about the module。
最後,要真正使用它:
{% for result in results %}
<p>{{ result }}</p>
{% end %}
{% module Paginator(page, page_size, results_count) %}
希望幫助!
這與REST有什麼關係? –