python - 分配前引用的 /products/search/ 局部变量“查询”处的 UnboundLocalError
问题描述
我有这个问题
分配前引用的 /products/search 局部变量“查询”处的 UnboundLocalError
/在此代码帮助下,我正在使用标题和类别搜索产品
def search(request):
try:
q = request.GET.get('q', '')
except:
q = False
if q:
query = q
product_queryset = Product.objects.filter(
Q(name__icontains=q)|
Q(description__icontains=q)
)
category_queryset = Category.objects.filter(
Q(title__icontains=q)|
Q(description__icontains=q)
)
results = list(chain(product_queryset,category_queryset))
context = {
'query':query,
'product_queryset':product_queryset,
'category_queryset':category_queryset,
'results':results,
}
return render(request,"products/search.html", context)
解决方案
就像塞尔丘克所说,你没有定义query
是否q
为无/假。尝试:
def search(request):
try:
q = request.GET.get('q', '')
except:
q = False
if q:
query = q
else:
query = None
product_queryset = Product.objects.filter(
Q(name__icontains=q)|
Q(description__icontains=q)
)
category_queryset = Category.objects.filter(
Q(title__icontains=q)|
Q(description__icontains=q)
)
results = list(chain(product_queryset,category_queryset))
context = {
'query':query,
'product_queryset':product_queryset,
'category_queryset':category_queryset,
'results':results,
}
return render(request,"products/search.html", context)
我们不确定query
应该是什么或您如何使用它。将其设置为 None 应该可以修复 UnboundLocalError。
我也看不出有任何理由需要包装q = request.GET.get('q', '')
在 try/except 块中。如果未定义,get
将返回 '' 。q
您可以将代码简化为:
def search(request):
q = request.GET.get('q', '')
product_queryset = Product.objects.filter(
Q(name__icontains=q)|
Q(description__icontains=q)
)
category_queryset = Category.objects.filter(
Q(title__icontains=q)|
Q(description__icontains=q)
)
results = list(chain(product_queryset,category_queryset))
context = {
'query': q,
'product_queryset':product_queryset,
'category_queryset':category_queryset,
'results':results,
}
return render(request,"products/search.html", context)
模板形式
<form method="get" action="{% url 'products:search' %}">
<button class="flex-c-m trans-04">
<i class="zmdi zmdi-search"></i>
</button>
<input class="plh3" type="text" placeholder="Search..." name="q">
</form>
推荐阅读
- python - 选择具有给定日期时间索引的行
- javascript - TypeError: POST 到 API 时无法获取 + net::ERR_NAME_NOT_RESOLVED
- shell - 输入到类似于 git rebase -i 的终端
- r - 如何使用 mutate() 在所有其他列的函数中创建一个新列而不命名它们
- javascript - 如何在数据表反应原生纸中水平添加滚动条?
- javascript - 如何生成沙盒 ExtJS 7.3 应用程序?
- javascript - 如何为自动 ftp 上传进行 Apache Netbeans 11.3 运行配置?
- python - 如何总结两个不同的嵌套列表?
- javascript - 如何使用 Typescript 将 JSON 文件拆分为单独的文件
- jquery - 获取在 jquery.click() 事件中单击的行的详细信息