2016-07-17 18 views
0

Angenommen, ich habe eine Ergebnisseite mit mehreren Filtern. Die Filter werden als URL-Parameter an flask übergeben. Aber sobald ich Next Page drücke, wird das vergessen. Was ist der beste Weg, um diese Parameter von Seite zu Seite zu behalten?Was ist beim Flashen der beste Weg, um Parameter beim Paginieren zu behalten?

Ich bin sicher, Javascript-Frameworks vorhanden sind, um dies zu tun, aber ich würde lieber nicht JavaScript-Frameworks verwenden.

Antwort

1

Angenommen, Sie geben HTML und nicht JSON wieder (das scheint, als kämen Sie aus dem Tag), warum fügen Sie nicht einfach die Filterabfrageparameter aus der Anfrage in die gerenderte Seite ein?

Zum Beispiel so etwas wie diese:

Python:

@app.route('/search') 
def search(): 
    page_no = request.args.get('page_no') 
    color = request.args.get('color') 
    brand = request.args.get('brand') 
    # TODO: Generate your results here.. 
    return render_template('results.html', results=results, page_no=page_no, brand=brand color=color) 

Vorlage:

<a href="{{ url_for('search', page_no=str(page_no - 1), brand=brand, color=color) }}">Prev</a> 
<a href="{{ url_for('search', page_no=str(page_no + 1), brand=brand, color=color) }}">Next</a> 

Dies ist ein minimales Beispiel. Sie möchten auch spezielle Fälle behandeln, wie zum Beispiel das Rendern eines "vorherigen" Links auf der ersten Seite. Wahrscheinlich auch eine Validierung der Eingabeparameter. Es zeigt jedoch, wie die Filterparameter in der Link-URL gepflegt werden.

Je nachdem, wie viele Filterparameter Sie haben sollte, können Sie es auch so etwas wie dieses Versiegen:

Python:

FILTER_PARAM_NAMES = ['keyword', 'date', 'foo', 'bar'] 
# ... 
def search(): 
    filter_params = {f: request.args.get(f) for f in FILTER_PARAM_NAMES} 
    # ... 
    return render_template('results.html', results=results, **filter_params) 

Vorlage:

url_for('search', page_no=page_no, **filter_params) 
+0

Also, angenommen, wir holen die "filter_str", wie würde dann diese Zeichenfolge von der HTML erzeugt werden? Wenn ich zum Beispiel eine Dropdown-Liste zur Auswahl einer Filterfarbe habe, könnte das einen GET-Parameter "color = blue" erhalten. Aber ich wollte "filter_str = color: blue, brand: nike" verwenden, wie würde HTML das generieren? Ich denke, dass mit der Alternative "render_template ** filter_params" dies kein Problem wäre. – oneloop

+0

Ja, mehrere Parameter zu verwenden, ist wahrscheinlich besser, als sie in einen einzelnen Parameter filter_str zu stopfen. Ich aktualisiere das Beispiel anhand Ihrer Parameternamen. – bsa

+0

Ok, also wie würde der Code 'url_for color = yellow' usw. generiert? Wenn Sie nicht a priori die Anzahl der Filter (da die meisten Male einige der Filter nicht verwendet werden), wie gehen Sie damit um? – oneloop