如何缩短这个django视图请求?

问题描述 投票:0回答:1
def test(request):
    x1 = MenuItem.objects.filter(item_category__icontains='PANCAKE')
    x2 = MenuItem.objects.filter(item_category__icontains='EGG')
    x3 = MenuItem.objects.filter(item_category__icontains='PANNIS')
    x4 = MenuItem.objects.filter(item_category__icontains='SUBS')
    x5 = MenuItem.objects.filter(item_category__icontains='WRAPS')
    x6 = MenuItem.objects.filter(item_category__icontains='TEA')
    x7 = MenuItem.objects.filter(item_category__icontains='FRAPPE')
    x8 = MenuItem.objects.filter(item_category__icontains='SMOOTHIE')
    x9 = MenuItem.objects.filter(item_category__icontains='GLUTENF')
    x10 =MenuItem.objects.filter(item_category__icontains='WAFFLES')
    x11 =MenuItem.objects.filter(item_category__icontains='TOAST')
    x12 =MenuItem.objects.filter(item_category__icontains='HOTPASTA')
    x13 =MenuItem.objects.filter(item_category__icontains='BAGELS')
    x14 =MenuItem.objects.filter(item_category__icontains='FRIES')
    x15 =MenuItem.objects.filter(item_category__icontains='SALADS')
    x16 =MenuItem.objects.filter(item_category__icontains='DESSERTS')
    context={
        'p':x1,
        'e':x2,
        'pn':x3,
        's':x4,
        'w':x5,
        't':x6,
        'f':x7,
        'sm':x8,
        'gf':x9,
        'wa':x10,
        'to':x11,
        'hp':x12,
        'b':x13,
        'fr':x14,
        'sa':x15,
        'd':x16,

    }
    return render(request, 'posts/test.html',context)

我知道有很多不同的方法可以缩短这个请求,但我在考虑听取一些建议,如果有人精通python框架,会如何处理这个请求呢?

django django-views
1个回答
1
投票

Python的 for ... in ... 循环语句和 dictionary 使得缩短代码变得简单。另外,当将来添加新的值时,只需输入 key: valuedata_dict

def test(request):
    data_dict = {
        'p': 'PANCAKE',
        'e': 'EGG',
        'pn': 'PANNIS',
        's': 'SUBS',
        'w': 'WRAPS',
        't': 'TEA',
        'f': 'FRAPPE',
        'sm': 'SMOOTHIE',
        'gf': 'GLUTENF',
        'wa': 'WAFFLES',
        'to': 'TOAST',
        'hp': 'HOTPASTA',
        'b': 'BAGELS',
        'fr': 'FRIES',
        'sa': 'SALADS',
        'd': 'DESSERTS',
    }
    context = {}

    for key, value in data_dict.items():
        context[key] = MenuItem.objects.filter(item_category__icontains=value)

    return render(request, 'posts/test.html', context)
© www.soinside.com 2019 - 2024. All rights reserved.