我正在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中为此类事物创建菜单,尽管我在附近搜索了一些内容。
答案 0 :(得分:0)
您可以将查询转换为词典列表,然后使用 operator 模块的 itemetter 函数根据一个或多个词典值对条目进行排序。
假设您具有以下列表:
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'}
]