Comments 4
Спасибо
0
а как правильнее реализовать циферную пагинацию типа
1 2 3… 99 последняя (как на неё кстати линк лучше просчитать, count / на колво отображаемых постов из конфига?)
и тд? пробегать в цикле has next затратно же?
п.с. в Питоне я пока только начал разбираться
1 2 3… 99 последняя (как на неё кстати линк лучше просчитать, count / на колво отображаемых постов из конфига?)
и тд? пробегать в цикле has next затратно же?
п.с. в Питоне я пока только начал разбираться
0
Я думаю что можно использовать то же самое что описано в статье, только немножко переделать шаблон как-нибудь так:
И вьюху изменить:
Только не забыть обработать в шаблоне граничные состояния, когда предыдущей или следующей страницы нет.
<!-- posts is a Paginate object -->
{% for post in posts.items %}
{% include 'post.html' %}
{% endfor %}
{% if posts.has_prev %}<a href="{{ url_for('user', nickname = user.nickname, page = posts.prev_num) }}"><< {{ page - 1 }}</a>{% endif %}
...
{% if posts.has_next %}<a href="{{ url_for('user', nickname = user.nickname, page = posts.next_num) }}">{{ page + 1}} >></a>{% endif %}
{% if page != max_page %} <a href="{{ url_for('user', nickname = user.nickname, page = max_page) }}"> {{ max_page}}</a>{% endif %}
И вьюху изменить:
@app.route('/user/<nickname>')
@app.route('/user/<nickname>/<int:page>')
@login_required
def user(nickname, page = 1):
user = User.query.filter_by(nickname = nickname).first()
if user == None:
flash('User ' + nickname + ' not found.')
return redirect(url_for('index'))
posts = user.posts.paginate(page, POSTS_PER_PAGE, False)
max_page = User.query.all().count() / POSTS_PER_PAGE + 1
return render_template('user.html',
user = user,
posts = posts,
max_page = max_page,)
Только не забыть обработать в шаблоне граничные состояния, когда предыдущей или следующей страницы нет.
+1
Sign up to leave a comment.
Мега-Учебник Flask, Часть 9: Пагинация