2016-04-24 3 views
1

Im Rückführen der Modul-Kolben-Paginieren mit hier: http://pythonhosted.org/Flask-paginate/Python-Kolben-Paginieren zu viele Ergebnisse auf Seite

Ich bin in der Lage, Ergebnisse zurückzuliefern, und meine Paginierung beginnt mit der richtigen Anzahl von Seiten, aber die zur Zeit zeigt 69 Ergebnisse pro Seite. Die Dokumentation zeigt per_page =, aber dies betrifft nur meine Startseite, die korrekt ist. Ich benutze SQL-Alchemy für meine Datenbank.

@search.route('/search') 
def search(): 

    page, per_page, offset, inner_window = get_page_items() 

    links = Item.query.all() 
    total = Item.query.count() 
    pagination = get_pagination(page=page, 
          per_page=per_page, 


          total = total,   
          format_total=True, 
          format_number=True, 
          record_name='links', 

          ) 

    return render_template('search/searchPage.html', offset=offset, total=total, links=links, pagination=pagination, per_page=per_page, page=page) 

def get_css_framework(): 
    return 'bootstrap3' 

def get_link_size(): 
    return 'sm' #option lg 

def show_single_page_or_not(): 
    return False 

def get_page_items(): 
    page = int(request.args.get('page', 1)) 
    per_page = 10 

    inner_window=10 

    offset = (page) * 10 
    return page, per_page, offset, inner_window 


def get_pagination(**kwargs): 
    kwargs.setdefault('record_name', 'repositories') 

    return Pagination(css_framework=get_css_framework(), 
         link_size=get_link_size(), 
         show_single_page=show_single_page_or_not(), 

         **kwargs 

        ) 

Antwort

0

Wenn Sie ausdrucken page Sie wahrscheinlich sehen, dass es 1 immer wieder, da Sie die request außerhalb des Anwendungsbereichs zuzugreifen versuchen, Funktion, um die Suchroute und .get() immer 1 zurück.

versuchen, etwas so ...

@search.route('/search') 
    def search(): 
     ... 

     page = int(request.args.get('page', 1)) 
     per_page = 10 
     inner_window = 10 
     offset = page * 10 

     ... 

Wenn Sie eine eigene Funktion verwenden, um weiterhin die Sie benötigen, um das request Objekt, um es passieren, um die Werte zuzugreifen.

Hoffe, dass dies hilft!

+0

noch 69 pro Seite :( – Anekdotin

+0

ich mit der Basisimplementierung beginnen würde, dass sie in der Dokumentation zeigen, und die beginnen zu abstrahieren out Funktionalität, wenn Sie wollen, sobald Sie wissen, dass es funktioniert. Können Sie bearbeiten, um Ihre Ansicht und Ihre db-Einrichtung aufzunehmen? – siegerts

0

Ich sehe, dass Sie Flask-SQLAlchemy entschied sich stattdessen zu verwenden, aber hoffentlich wird diese Antwort helfen jemand anderes:

Sie fast dort waren - Sie richtig erfasst Seite, per_page und Offset (es gibt tatsächlich ein built-in für diese , die Sie mit from flask_paginate import get_page_args importieren können), aber Sie müssen auch die per_page und den Offset für Ihre Abfrage verwenden. Also in Ihrem Beispiel:

all_links = Item.query.all() 
links_for_render_template = Item.query.limit(per_page).offset(offset) 

Hier ist ein vollständiges Beispiel auch:

from flask_paginate import Pagination, get_page_args 

@search.route('/search') 
def search(): 
    page, per_page, offset = get_page_args() 
    all_links = Item.query.all() 
    links_for_render_template = Item.query.limit(per_page).offset(offset) 

    pagination = get_pagination(page=page, per_page=per_page, offset=offset, total=all_links.count(), record_name='links') 

    return render_template('search/searchPage.html', links=links_for_render_template, pagination=pagination)