Только передавайте аргументы, которые не являются None, для URL Flask - PullRequest
4 голосов
/ 17 апреля 2019

В настоящее время я пытаюсь настроить поиск во Flask, используя ключевые слова и метод GET.

Чтобы справиться с нумерацией страниц, я должен передать все ключевые слова для фильтров на url_for для следующей или последней страницы. Однако иногда эти ключевые слова не нужны и просто загромождают строку URL.

{{ url_for(request.endpoint, page=pagination.next_num, searchTerm=searchTerm, blendLicense=blendLicense, renderEngine=renderEngine, blenderVersion=blenderVersion) }}

Есть ли способ передать только те ключевые слова, которые не None, чтобы не загромождать строку URL? Если бы проверялось только одно ключевое слово, я бы использовал блок if else, но есть много ключевых слов для проверки.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

url_for уже игнорирует ключевые слова, None. Вам не нужно ничего делать поверх этого.

@app.route("/search")
def search():
    ...
url_for("search", name="Flask", page=2))
"/search?name=Flask&page=2"
url_for("search", name="Flask", page=None))
"/search?name=Flask"
0 голосов
/ 17 апреля 2019

Выполните вызов следующим образом:

kwargs = dict(searchTerm=searchTerm,
              blendLicense=blendLicense,
              renderEngine=renderEngine,
              blenderVersion=blenderVersion)

url_for(request.endpoint, page=pagination.next_num, **kwargs)

Это работает так же, как код в вашем вопросе.Но теперь вы можете удобно отфильтровать значение по умолчанию, такое как None:

def filter_default(kwargs):
    return {k: v
            for k, v in kwargs.items()
            if v}

(или используйте if v is not None, если могут присутствовать такие значения, как пустая строка.)

Применить этоФункция фильтрации в словаре перед его передачей.

EDIT

{{ url_for(request.endpoint,
           page=pagination.next_num,
           **filter_default(dict(searchTerm=searchTerm,
                                 blendLicense=blendLicense,
                                 renderEngine=renderEngine,
                                 blenderVersion=blenderVersion))) }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...