Mar*_*ark 0 python pagination flask flask-sqlalchemy
我有一个观点:
@app.route('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
@app.route('/index/<int:page>', methods=['GET', 'POST'])
def index(page=1):
posts = Post.query.paginate(page, 3, False).items
return render_template('index.html', posts=posts)
Run Code Online (Sandbox Code Playgroud)
代码模板:
{% if posts %}
<ol>
{% for post in posts %}
<li>{{ post.title }}</li> | {{ post.text }} | {{ post.time }}</li>
{% endfor %}
</ol>
{% else %}
<h2>There is no posts</h2>
{% endif %}
{% if posts.has_prev %}<a href="{{ url_for('index', page=posts.prev_num) }}"><< Newer posts</a>{% else %}<< Newer posts{% endif %} |
{% if posts.has_next %}<a href="{{ url_for('index', page=posts.next_num) }}">Older posts >></a>{% else %}Older posts >>{% endif %}
Run Code Online (Sandbox Code Playgroud)
问题是它不会生成链接以查看更多帖子.
.has_prev
并且.has_next
是Pagination
实例的属性,但您丢弃该实例.您传入视图的所有内容都是Pagination.items
属性.然后,您尝试仍然访问项目列表中的属性.has_prev
和.has_next
属性,并且那些属性不存在,因此Jinja2将这些属性解析为未定义.
通过Pagination
实例:
posts = Post.query.paginate(page, 3, False)
return render_template('index.html', posts=posts)
Run Code Online (Sandbox Code Playgroud)
并调整您的模板:
{% if posts.items %}
<ol>
{% for post in posts.items %}
<li>{{ post.title }}</li> | {{ post.text }} | {{ post.time }}</li>
{% endfor %}
</ol>
{% else %}
<h2>There is no posts</h2>
{% endif %}
{% if posts.has_prev %}<a href="{{ url_for('index', page=posts.prev_num) }}"><< Newer posts</a>{% else %}<< Newer posts{% endif %} |
{% if posts.has_next %}<a href="{{ url_for('index', page=posts.next_num) }}">Older posts >></a>{% else %}Older posts >>{% endif %}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
850 次 |
最近记录: |