使用Flask和Peewee实现分页功能

3
我正在尝试使用PeeweeFlask中对查询结果进行分页。我试图使用playhouse.flask_utils中的object_list函数。

你可以看到object_list的示例似乎非常简单,下面的代码是我正在尝试使其工作的代码:

from flask import Flask
from playhouse.flask_utils import object_list
from peewee import *
from database import *

@app.route("/items/")                                                         
def items():                                                                  
    all_items = Quote.select()                                                     
    return object_list("items.html", all_items) 

模板items.html包含以下内容:

<p>Hello world</p>                                               
{% for item in all_items %}                                                       
    <p>{{ item.text }}</p>                                                    
{% endfor %}                                                                    

{% if page > 1 %}                                                               
    <a class="previous" href="./?page={{ page - 1 }}">Previous</a>              
{% endif %}                                                                     
{% if pagination.get_pages() > page %}                                          
    <a class="next" href="./?page={{ page + 1 }}">Next</a>                      
{% endif %}        

当然,我运行python app.py,但是收到一个500内部服务器错误。我想对我的查询结果进行分页,你有什么想法如何实现这一点?或者你能看出我在这里做错了什么吗?提前感谢您。

编辑#1,在终端中出现以下错误:

127.0.0.1 - - [09/Jan/2016 20:47:17] "GET /items/ HTTP/1.1" 500 -
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/web/index.py", line 19, in items
    return object_list("items.html", all_items)
  File "/usr/lib/python2.7/site-packages/playhouse/flask_utils.py", line 64, in object_list
    **kwargs)
  File "/usr/lib/python2.7/site-packages/flask/templating.py", line 128, in render_template
    context, ctx.app)
  File "/usr/lib/python2.7/site-packages/flask/templating.py", line 110, in _render
    rv = template.render(context)
  File "/usr/lib/python2.7/site-packages/jinja2/environment.py", line 989, in render
    return self.environment.handle_exception(exc_info, True)
  File "/usr/lib/python2.7/site-packages/jinja2/environment.py", line 754, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/home/web/templates/items.html", line 9, in top-level template code
    {% if pagination.get_pages() > page %}
UndefinedError: 'playhouse.flask_utils.PaginatedQuery object' has no attribute 'get_pages'

你的错误信息是什么? - Eli Rose
@EliRose 谢谢您的关注。我编辑了我的问题并添加了在终端中出现的错误信息! - gglasses
Python的回溯信息会更有帮助——当您访问页面时,它应该会在浏览器中显示。这是否发生了呢? - Eli Rose
@EliRose 不,这并没有发生。没有出现任何回溯。 - gglasses
调试开启了吗?如果是的话,你应该会看到类似于这个屏幕 http://flask.pocoo.org/docs/0.10/quickstart/ 的东西。如果没有开启,就把它打开。 - Eli Rose
@EliRose 感谢您的回复。我编辑了问题并添加了回溯信息。错误提示如下:UndefinedError: 'playhouse.flask_utils.PaginatedQuery object' has no attribute 'get_pages'. - gglasses
1个回答

10

5
我记得在其他地方见过coleifer这个名字,然后我想起了在Github上的peewee的URL:https://github.com/coleifer/peewee :) - gglasses

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接