【发布时间】:2022-01-13 05:46:31
【问题描述】:
我正在尝试过滤一些产品,并按价格升序和降序对过滤后的产品进行排序。
这是我在视图中的代码:
def is_valid_queryparam(param):
return param != '' and param is not None
def filter(request):
if request.GET:
price_min = request.GET.get('priceMin')
price_max = request.GET.get('priceMax')
sort_by = request.GET.get("sort", "l2h")
if is_valid_queryparam(price_min):
if sort_by == "l2h":
products = Product.objects.filter(price__gte=price_min).order_by('price')
elif sort_by == "h2l":
products = Product.objects.filter(price__gte=price_min).order_by('-price')
paginator = Paginator(products, 9)
page = request.GET.get('page')
paged_products = paginator.get_page(page)
product_count = products.count()
if is_valid_queryparam(price_max):
if sort_by == "l2h":
products = Product.objects.filter(price__lte=price_max).order_by('price')
elif sort_by == "h2l":
products = Product.objects.filter(price__lte=price_max).order_by('-price')
paginator = Paginator(products, 9)
page = request.GET.get('page')
paged_products = paginator.get_page(page)
product_count = products.count()
else:
products = Product.objects.all().order_by('price')
paginator = Paginator(products, 9)
page = request.GET.get('page')
paged_products = paginator.get_page(page)
product_count = products.count()
context={
'products': paged_products,
'product_count': product_count,
}
return render(request, 'store.html', context)
如果我尝试根据最低和最高价格进行过滤,它会起作用,但是当我尝试排序或没有应用过滤器时,我会得到这个 UnboundLocalError:
UnboundLocalError at /store/
local variable 'paged_products' referenced before assignment
Request Method: GET
Request URL: http://127.0.0.1:8000/store/?sort=h2l
Django Version: 3.1
Exception Type: UnboundLocalError
Exception Value:
local variable 'paged_products' referenced before assignment
Exception Location: C:\Users\store\views.py, line 299, in filter
我研究了 Django 文档、google 和 SO,但没有找到解决方案。
我试图重新排列代码,将变量声明为全局变量,从request.GET 参数中排除“排序”,但没有成功。
【问题讨论】:
标签: javascript python html django django-views