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)
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
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
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