2013-04-12 6 views
2

Django REST 프레임 워크를 사용하여 페이지 매김을 설정할 수 있습니다. 요청을하면 JSON 객체가 반환되며 '페이징'속성에는 '다음'및/또는 '이전'속성이있는 경우 다른 페이지의 URL (있는 경우)이 포함됩니다.토네이도가 페이지 매김을 처리 할 수 ​​있습니까?

토네이도는 페이지 매김을 설정할 수있는 옵션을 제공합니까?

웹을 토네이도 검색 예제로 검색했지만 찾을 수 없습니다.

도움을 주시면 감사하겠습니다. 미리 감사드립니다.

+0

REST와 어떤 관련이 있습니까? –

답변

7

아니요, 페이지 매김은 데이터베이스와 매우 긴밀하게 작업해야하기 때문에 토네이도는 DB에 무관합니다.

다음은 내가 사용하는 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 : tell your tornado app about the module

{% if pages > 1 %} 
<div class="pagination pagination-centered"> 
    <ul> 
    <li{% if previous %}><a href="{{ get_page_url(previous) }}">&laquo;</a>{% else %} class="disabled"><span>&laquo;</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) }}">&raquo;</a>{% else %} class="disabled"><span>&raquo;</span></li>{% end %} 
</ul> 
</div> 
{% end %} 

을 잊지 마십시오.

마지막으로, 실제로 그것을 사용 : 도움이

{% for result in results %} 
<p>{{ result }}</p> 
{% end %} 
{% module Paginator(page, page_size, results_count) %} 

희망을!

관련 문제