首页 > 解决方案 > 如何简化此代码并删除 if-else 块?

问题描述

任何人都可以帮助我简化代码,这样我就不必编写 if-else 块并且可以在用户是管理员用户时获取所有私人帖子或返回当前用户的私人帖子?

@main.route('/private')
@login_required
def private():
    page = request.args.get('page', 1, type=int)
    if current_user.username == "admin":
        posts = Post.query\
                    .filter_by(is_private=True)\
                    .order_by(Post.date_posted.desc())\
                    .paginate(per_page=5, page=page)
    else:
        posts = Post.query\
                    .filter_by(is_private=True, author=current_user)\
                    .order_by(Post.date_posted.desc())\
                    .paginate(per_page=5, page=page)
    return render_template('private.html', title="Private", posts=posts)

标签: pythonsqlalchemy

解决方案


试试这个:

@main.route('/private')
@login_required
def private():
    page = request.args.get('page', 1, type=int)
    kwargs = {'author' : current_user} \
        if current_user.username != "admin" else {}

    posts = Post.query\
                .filter_by(is_private=True, **kwargs)\
                .order_by(Post.date_posted.desc())\
                .paginate(per_page=5, page=page)
    return render_template('private.html', title="Private", posts=posts)

author=current_user仅当用户不是管理员时,这才应将 kwarg 添加到您的方法调用中。否则,**kwargs只会解压缩一个空字典,不会添加任何内容。


推荐阅读