python - 如何避免太多 if - else block 在 python 中

标签 python django

我编写了一个检查输入中的 4 个参数并在输出中显示结果列表的类。 此参数中只有一个是必需的,因此我有 7 个 if - else 嵌套 block 。 我想指定所述条件是否正常工作。

我在徘徊是否有更聪明的方式来写这个:

if cd['subject'] is None:
    if cd['school'] == '':
        if cd['price']:
            files = File.objects.filter(name__contains=cd['name'], price = '0.0')
        else:
            files = File.objects.filter(name__contains=cd['name'])
    else:
        if cd['price']:
            files = File.objects.filter(name__contains=cd['name'], school = cd['school'], price = '0.0')
        else:
            files = File.objects.filter(name__contains=cd['name'], school = cd['school'])
else:
    if cd['school'] == '':
        if cd['price']:
            files = File.objects.filter(name__contains=cd['name'], subject = cd['subject'], price = '0.0')
        else:
            files = File.objects.filter(name__contains=cd['name'], subject = cd['subject'])
    else:
        if cd['price']:
            files = File.objects.filter(name__contains=cd['name'], school = cd['school'], subject = cd['subject'], price = '0.0')
        else:
            files = File.objects.filter(name__contains=cd['name'], school = cd['school'], subject = cd['subject'])
return render(request, 'search.html', {'files': files, 'request': request})

最佳答案

在内部,您传递给函数的关键字参数只是一个dict。所以自己构建它并使用 **name 语法将它传递给函数:

args = {}

args['name__contains'] = cd['name']

if cd['subject'] is not None:
    args['subject'] = cd['subject']
if cd['school'] != '':
    args['school'] = cd['school']
if cd['price']:
    args['price'] = cd['price']

files = File.objects.filter(**args)
return render(request, 'search.html', {'files': files, 'request': request})

关于python - 如何避免太多 if - else block 在 python 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20751124/

相关文章:

python - 将属性设置为类的属性,其中后者从类方法返回

python - 如何从迭代器/生成器中取出第一个元素并将其放回 Python 中?

python - 如何在 python 中执行 excel 的 'format as table'

python - 在请求 python 上捕获代理错误

django - 不能同时设置 `read_only` 和 `write_only`

django admin - 显示 200 多个项目的全部

python - 如何通过在 Pandas 中联合数组来附加数据帧索引?

python - Django 管理员并显示缩略图

django - 如何手动清除/更新 Django 中的缓存 View

Django 统计当月创建的对象