我在views.py中有一个列出所有记录的功能,并允许用户搜索特定的记录,如果对类“怀疑” 进行过滤,我遇到的问题是一旦我尝试搜索系统崩溃并显示以下错误:
分配请求之前引用的本地变量“ ListQuery” 方法:GET请求URL:http://127.0.0.1:8000/blog/list/ Django 版本:2.1.3异常类型:UnboundLocalError异常值:
分配异常之前引用了局部变量“ ListQuery” 位置:C:\ Users \ LT GM \ Desktop \ ABenvironment \ myABenv \ blog \ views.py 在listANDsearch中,第186行Python可执行文件:C:\ Users \ LT GM \ AppData \ Local \ Programs \ Python \ Python37 \ python.exe Python 版本:3.7.1
环境:
请求方法:GET请求URL:http://127.0.0.1:8000/blog/list/
Django版本:2.1.3 Python版本:3.7.1已安装的应用程序: ['django.contrib.admin','django.contrib.auth', 'django.contrib.contenttypes','django.contrib.sessions', 'django.contrib.messages','django.contrib.staticfiles','blog', 'widget_tweaks','import_export']已安装的中间件: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware']
跟踪:
文件“ C:\ Users \ LT GM \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ core \ handlers \ exception.py“ 在内部 34. response = get_response(request)
文件“ C:\ Users \ LT GM \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ core \ handlers \ base.py“ 在_get_response中 126. response = self.process_exception_by_middleware(e,request)
文件“ C:\ Users \ LT GM \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ django \ core \ handlers \ base.py“ 在_get_response中 124. response = wrapd_callback(request,* callback_args,** callback_kwargs)
文件“ C:\ Users \ LT GM \ Desktop \ ABenvironment \ myABenv \ blog \ views.py”在 列表和搜索 186. elif ListQuery == []:
异常类型:/ blog / list /异常值:UnboundLocalError 赋值之前引用的本地变量“ ListQuery”
def listANDsearch(request):
#deny anonymouse user to enter the list page
if not request.user.is_authenticated:
return redirect("login")
else:
queryset = suspect.objects.all()
# return render(request,"blog/list.html", {"object_list":queryset})
#search
query=request.GET.get("q")
print("search for :",query)
if query == "":
messages.error(request,"Search field is empty!")
print("Search field is empty!!!!!!!!!!!!!!!!")
elif query:
queryset_list=queryset_list.filter(
Q(suspect_name__icontains=query)|
Q(suspect_father_name__icontains=query)|
Q(suspect_mother_name__icontains=query)|
Q(content__icontains=query)|
Q(create_date__icontains=query)
# Q(user__first_name__contains=query)
).distinct()
ListQuery = list(queryset_list)
#paginator in order to make several pages
paginator = Paginator(queryset_list, 10) # Show 5 items per page
page_request_var = "page"#this line to change dynamicly the string befor the number of page like **page 1** or **abc 1**
page = request.GET.get(page_request_var)
queryset = paginator.get_page(page)
context={
"object_list":queryset,
"title":"List Items",
"page_request_var":page_request_var,
}
return render(request,"blog/list.html", context)
elif ListQuery == []:
messages.error(request,"Record not found/does not exist!")
print("Record does not exist!!!!!!!!!!!!!!!!")
答案 0 :(得分:0)
您有一个带有3个独立条件的if语句。您已经在第二个中定义了ListView
并尝试在第三个条件语句中访问它。因此,您会收到此错误。您需要更新代码,例如:
# views.py
def listANDsearch(request):
try:
#deny anonymouse user to enter the list page
if not request.user.is_authenticated:
return redirect("login")
else:
queryset = suspect.objects.all()
# return render(request,"blog/list.html", {"object_list":queryset})
#search
query=request.GET.get("q")
print("search for :",query)
if query == "":
messages.error(request,"Search field is empty!")
print("Search field is empty!!!!!!!!!!!!!!!!")
return redirect("login")
elif query:
queryset_list=queryset_list.filter(
Q(suspect_name__icontains=query)|
Q(suspect_father_name__icontains=query)|
Q(suspect_mother_name__icontains=query)|
Q(content__icontains=query)|
Q(create_date__icontains=query)
# Q(user__first_name__contains=query)
).distinct()
ListQuery = list(queryset_list)
# move your conditional statement here
if ListQuery == []:
messages.error(request,"Record not found/does not exist!")
print("Record does not exist!!!!!!!!!!!!!!!!")
return redirect("login")
else:
#paginator in order to make several pages
paginator = Paginator(queryset_list, 10) # Show 5 items per page
page_request_var = "page"#this line to change dynamicly the string befor the number of page like **page 1** or **abc 1**
page = request.GET.get(page_request_var)
queryset = paginator.get_page(page)
context={
"object_list":queryset,
"title":"List Items",
"page_request_var":page_request_var,
}
return render(request,"blog/list.html", context)
except Exception as e:
print("Exception occurred.")
return redirect("login")