我有以下基于功能的视图
HashSet
当我执行调用此函数的url时,我收到以下错误
Set<String> movies = new HashSet<>();
movies.add("Avatar");
movies.add("The Lord of the Rings");
movies.add("Titanic");
def post_search(request):
form = SearchForm()
if 'query' in request.GET:
form = SearchForm(request.GET)
if form.is_valid():
cd = form.cleaned_data
results = SearchQuerySet().models(Post).filter(content=cd['query']).load_all()
# count total results
total_results = results.count()
return render(request, 'blog/post/search.html', {'form': form,
'cd': cd,
'results': results,
'total_results': total_results})
,UnboundLocalError: local variable 'cd' referenced before assignment
[25/Aug/2016 22:48:13] "GET /blog/search/ HTTP/1.1" 500 69440
和cd
变量在最后与results
句子不同的范围内声明和使用。
出于这个原因,错误。
我已经将这些变量初始化为这种方式的全局变量:
total_results
之前的条件句
return render(request ...)
我的GET请求是有效的
cd = results=total_results=None
我可以用另一种方式解决这个问题吗? 此功能适用于在网络中搜索, 当我有很多用户使用此功能时这是否很好?
我认为解决方案不是好的做法......我不知道。
答案 0 :(得分:1)
这意味着,您的form.is_valid()
是False
,或者您没有提出GET
请求。
在第一个if条件之前添加cd = results = total_results = None
。因为,在您当前的代码中,如果任何if
条件失败,cd
,results
和total_results
将不会被初始化,因此会抛出此错误。您的更新代码应为:
def post_search(request):
form = SearchForm()
cd = results = total_results = None # <--- Add this to your code
if 'query' in request.GET:
. . . Something Something
return render(request, 'blog/post/search.html', {'form': form,
'cd': cd,
'results': results,
'total_results': total_results})
答案 1 :(得分:1)
def post_search(request):
#cd = results = total_results = None
form = SearchForm()
if 'query' in request.GET:
form = SearchForm(request.GET)
if form.is_valid():
cd = form.cleaned_data
results = SearchQuerySet().models(Post).filter(content=cd['query']).load_all()
total_results = results.count()
return render(request,
'blog/post/search.html',
{'form': form,
'cd': cd,
'results': results,
'total_results': total_results})
return render(request,'blog/post/search.html', {'form': form})
这项工作很好。 享受