我正在嘗試過濾一些產品并按價格升序和降序對過濾后的產品進行排序。
這是我在視圖中的代碼:
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引數中排除“排序”,但沒有成功。
uj5u.com熱心網友回復:
您收到UnboundLocalError錯誤是因為您還沒有為 sort by和sort by定義else塊。因此,當您不應用過濾器并且永遠不會被定義和提升.if is_valid_queryparam(price_min):if is_valid_queryparam(price_max):paged_productsproduct_countUnboundLocalError at /store/ local variable 'paged_products' referenced before assignment
請嘗試下面的以下代碼,以消除該問題并優化代碼。
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')
else:
products = Product.objects.filter(price__gte=price_min)
else:
products = Product.objects.all().order_by('price')
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')
else:
products = Product.objects.filter(price__lte=price_max)
else:
products = Product.objects.all().order_by('price')
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)
uj5u.com熱心網友回復:
我稍微更改了 Nahidur Ra??hman 的代碼,以便最低價格過濾器起作用,有必要從最低價格中獲取查詢并應用最高價格的過濾器。
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')
else:
products = Product.objects.filter(price__gte=price_min)
else:
products = Product.objects.all().order_by('price')
if is_valid_queryparam(price_max):
if sort_by == "l2h":
products = products.filter(price__lte=price_max).order_by('price')
elif sort_by == "h2l":
products = products.filter(price__lte=price_max).order_by('-price')
else:
products = products.filter(price__lte=price_max)
else:
products = products
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/376399.html
標籤:javascript Python html 姜戈 django-views
上一篇:當我在具有數值的陣列上呼叫它時,我的math.pow回傳NaN。如何獲得陣列元素的平方
下一篇:基于結束編號的組物件
