Как переупорядочить список сообщений (т. Е. Новый запрос) на основе пользовательского ввода с Flask - PullRequest
0 голосов
/ 08 февраля 2019

Я создаю веб-сайт во Flask и хочу, чтобы пользователь мог сортировать основной список сообщений по своему выбору.По умолчанию сообщения сортируются по дате их истечения в порядке возрастания.Тем не менее, некоторые пользователи могут сортировать по алфавиту, по имени автора, дате публикации и т. Д.

Некоторые источники предложили мне построить строку на основе пользовательского ввода;однако, это не кажется самым эффективным способом сделать это (возможно, это так!)

Вот как выглядит мой код:

@index.route("/")
@index.route("/home")
def home():
    page = request.args.get('page', 1, type=int)
    experiences = 
Exp.query.order_by(Exp.date_expiry.asc()).paginate(page=page, per_page=5)
    return render_template('home.html', experiences=experiences)

Я думаю, что мне нужно передать вкакая-то переменная в моем домашнем маршруте, а затем однозначно сгенерировать мой запрос на основе этого, я просто не уверен точно, какова лучшая практика.Кроме того, я не уверен, как создать меню для такого рода вещей во Flask, хотя я кое-что искал.

1 Ответ

0 голосов
/ 08 февраля 2019

Вы можете преобразовать свой запрос в список словарей, а затем отсортировать записи по одному или нескольким значениям словаря, используя itemgetter модуля *1003* модуля.

Предположим, у вас есть следующий список:

posts_list = [
     {'post_id':100, 'author_name': 'John', 'date_posted':'2019-02-14', 'expiry_date':'2019-09-20'},
     {'post_id':101, 'author_name': 'Bob', 'date_posted':'2019-03-15', 'expiry_date':'2019-04-25'},
     {'post_id':102, 'author_name': 'Alice', 'date_posted':'2019-01-16', 'expiry_date':'2019-07-24'},
     {'post_id':103, 'author_name': 'Eric', 'date_posted':'2019-04-14', 'expiry_date':'2019-05-20'}
]

Довольно просто вывести эти строки, упорядоченные по любому из полей, общих для всех словарей.

Пример:

from operator import itemgetter

list_by_author_name = sorted(posts_list, key=itemgetter('author_name'))
list_by_date_posted = sorted(posts_list, key=itemgetter('date_posted'))
list_by_expiry_date = sorted(posts_list, key=itemgetter('expiry_date'))

print(list_by_author_name)
print(list_by_date_posted)
print(list_by_expiry_date)

, который дает следующий результат:

[
{'post_id': 102, 'author_name': 'Alice', 'date_posted': '2019-01-16', 'expiry_date': '2019-07-24'}, 
{'post_id': 101, 'author_name': 'Bob', 'date_posted': '2019-03-15', 'expiry_date': '2019-04-25'}, 
{'post_id': 103, 'author_name': 'Eric', 'date_posted': '2019-04-14', 'expiry_date': '2019-05-20'}, 
{'post_id': 100, 'author_name': 'John', 'date_posted': '2019-02-14', 'expiry_date': '2019-09-20'}
]

[
{'post_id': 102, 'author_name': 'Alice', 'date_posted': '2019-01-16', 'expiry_date': '2019-07-24'}, 
{'post_id': 100, 'author_name': 'John', 'date_posted': '2019-02-14', 'expiry_date': '2019-09-20'}, 
{'post_id': 101, 'author_name': 'Bob', 'date_posted': '2019-03-15', 'expiry_date': '2019-04-25'}, 
{'post_id': 103, 'author_name': 'Eric', 'date_posted': '2019-04-14', 'expiry_date': '2019-05-20'}
]

[
{'post_id': 101, 'author_name': 'Bob', 'date_posted': '2019-03-15', 'expiry_date': '2019-04-25'}, 
{'post_id': 103, 'author_name': 'Eric', 'date_posted': '2019-04-14', 'expiry_date': '2019-05-20'}, 
{'post_id': 102, 'author_name': 'Alice', 'date_posted': '2019-01-16', 'expiry_date': '2019-07-24'}, 
{'post_id': 100, 'author_name': 'John', 'date_posted': '2019-02-14', 'expiry_date': '2019-09-20'}
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...