Динамические шаблоны URL и Jinja - PullRequest
0 голосов
/ 27 сентября 2019

Я пытался создать пользовательский интерфейс для фильтрации результатов из моей базы данных.Важно то, что я хочу, чтобы фильтры были «аддитивными».Таким образом, если пользователь выбирает один фильтр, страница перенаправляет и отображает результаты.После этого пользователь может выбрать другой фильтр, и результаты сузятся до обоих фильтров.Это должно продолжаться для любого количества фильтров.

Вот как это выглядит сейчас

@app.route('/')
def home():

    kind = request.args.get('kind')
    price = request.args.get('price')
    category = request.args.get('category')

    filters = {}
    if price is not None: filters['params.price'] = {'$lt' : int(price) }
    if kind is not None: filters['kind'] = kind
    if category is not None: filters['category'] = category

    posts = db.collection.find(filters)

    return render_template('home.html', posts=posts)

и ссылки для моих ссылок с использованием шаблонов jinja2 выглядят как

<li><a href="{{ url_for ('home', kind='m') }}">Label</a></<li>
<li><a href="{{ url_for ('home', price=50000)}}">Label</a></li>
<li><a href="{{ url_for ('home', category='p') }}">Label</a></li>
... many more similar links

В настоящее времяэто работает как переопределение для URL.Если я нажимаю на любую из этих ссылок, она просто заменяет весь URL-адрес и использует переменную из ссылки.

first link: http://127.0.0.1/?kind=m
second link: http://127.0.0.1/?price=5000
third link: http://127.0.0.1/?category=p

Что я хотел бы сделать, это добавить запрос. Если я щелкну любой изссылки запоминают предыдущие выбранные фильтры и «добавляет» последнюю нажатую ссылку.Ниже я покажу, как я ожидаю, что это сработает.

first link: http://127.0.0.1/?kind=m
second link: http://127.0.0.1/?kind=m?price=50000
second link: http://127.0.0.1/?kind=m?price=50000?category=p

1 Ответ

0 голосов
/ 27 сентября 2019

Вы можете передать все значения фильтра (изначально None) в представление и добавить их в качестве аргументов к вызовам url_for.Фильтры None не будут включены в ссылки.

...