【问题标题】:How to use cursor() for pagination?如何使用 cursor() 进行分页?
【发布时间】:2011-06-17 23:08:56
【问题描述】:

谁能给我指出一个cursor() 的实际应用来进行分页?

我不清楚如何使用documentation 中给出的cursor()

这是我的查询:

items = db.GqlQuery("SELECT * FROM Item ORDER BY date DESC LIMIT 30")

我是这样渲染的:

self.response.out.write("<ol>")
for item in items:
    self.response.out.write("""<li><a href="/vote/%s?type=%s"> ^ </a><a href="%s">%s</a> <span id='Small'>(%s)</span><br /> 
        <div id='Small'> 
        %s points %s by %s <a href="/item/%s"></a> | 
        <a href="/item/%s#disqus_thread"></a></div>
        </li><br /> """ % 
        (str(item.key().id()), merchandise_type, item.url, item.title, urlparse(item.url).netloc,
        item.points, item.date.strftime("%B %d, %Y %I:%M%p"), item.user_who_liked_this_item, str(item.key().id()), str(item.key().id())))                               

   self.response.out.write("</ol>")

谢谢!

更新

您好 Amir:感谢您的回答,但我无法使此链接正常工作。这是我所拥有的:

#===========adding cursor here===========#
            cursor = self.request.get("cursor")
            if cursor: query.with_cursor(cursor)
            items = query.fetch(30)
            cursor  = query.cursor()

#===========adding cursor here===========#

#===========regular output===========#
            self.response.out.write("<ol>")
            for item in items:
                self.response.out.write("""<li>
                <a href="/vote/%s?type=%s"> ^ </a><a href="%s">
                <span id="large">%s</span></a> 
                <span id='Small'>(%s)</span>
                <br />  
                %s<br /> <span id='Small'> 
                %s points %s by %s <a href="/item/%s"></a> | 
                <a href="/item/%s#disqus_thread"></a>
                </span>
                </li><br /> """ %           
                (str(item.key().id()), merchandise_type, item.url, 
                item.title, urlparse(item.url).netloc, 
                item.summary, item.points, item.date.strftime("%B %d, %Y %I:%M%p"), 
                item.user_who_liked_this_item, str(item.key().id()),  
                str(item.key().id())))                               

            self.response.out.write("</ol>")
#===========regular output===========#

#===========link to cursor===========#
            self.response.out.write("""<a href="/dir?type=%s?cursor=%s">Next
            Page</a>""" % (merchandise_type, cursor))

但这会导致这个 url 什么都不显示:

http://localhost:8083/dir?type=newest?cursor=E9oBdgoTc2FyYWgtZm9yLXByZXNpZGVudBoESXRlbUtSBGRhdGVYAkwhQ1VSU09SIWoiahNzYXJhaC1mb3ItcHJlc2lkZW50cgsLEgRJdGVtGKsCDHIVCAcaBGRhdGUgACoJCMid8OXW4qYCggELCxIESXRlbRirAgzgAQAU

更新 2

请参阅下面的@Amir 评论:将第二个? 更改为&amp; 解决了问题。谢谢!

【问题讨论】:

    标签: python google-app-engine pagination cursor


    【解决方案1】:

    这里有一个简单的例子让你开始......

    query = db.GqlQuery("SELECT * FROM Item ORDER BY date DESC")
    cursor = self.request.get('cursor')
    if cursor: query.with_cursor(cursor)
    items = query.fetch(30)
    cursor = query.cursor()
    
    ... your regular output ...
    
    self.response.out.write('<a href="yoururl?cursor=%s">Next Page</a>' % cursor)
    

    【讨论】:

    • 关于如何制作“上一页”链接的任何想法? :D
    • 最简单的方法是使用返回按钮。由于光标是 url 的一部分,因此 url 将告诉查询从哪里开始。如果您正在执行某种 Ajax 解决方案,则可以存储以前的游标。这里有更多信息:stackoverflow.com/questions/4752931/…
    • 感谢您的回答,但我无法使指向下一页的链接正常工作。我究竟做错了什么?我添加了代码更新。再次感谢。
    • 第二个?应该是 url 中的 &
    猜你喜欢
    • 2019-02-03
    • 2012-11-10
    • 1970-01-01
    • 2018-03-04
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多