尝试创建django应用程序但出现UnboundLocalError at /search/ local variable 'results' referenced before assignment
错误。我无法看到问题,因为我的代码结果已分配 - 请查看:
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})
答案 0 :(得分:2)
也许你应该初始化结果。
将results = []
放在if form.is_valid()
答案 1 :(得分:2)
如果没有结果,这取决于你想要做什么。你还想加载视图吗?然后将results
变量初始化为任何if
条件(在本例中为外部条件):
...
results = [] #Or whatever empty datatype you need
if 'query' in request.GET:
...
如果您不想在没有结果的情况下加载视图,那么当您确定时,您可以移动内部return render(...)
内的if
一个results
变量开头。然后,您可以在函数末尾添加后备return render(...)
,超出任何if
条件。
但是,如果您总是想要加载相同的视图,我只会选择第一个视图。当您想要在未找到结果时加载其他视图时,添加多个return render(...)
似乎更合适。
答案 2 :(得分:2)
如果form
无效,该怎么办?例如,用户根本没有提供不正确的值?在这种情况下,results
未初始化。你可以:
使用[]
等空值初始化它。
提出错误并返回表单无效的用户信息。
答案 3 :(得分:1)
def post_search(request):
cd = ""
total_results = ""
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})
现在你必须在模板中编写验证码
答案 4 :(得分:0)
如果要以递归方式使用定义(根据您的情况计算结果),您应该在定义之外分配var结果,因为如果您这样做,它将在每次调用时重置。您必须将其分配给定义并将其声明为全局变量。
global results
results = ''
我个人建议您在使用Django进行编码之前,先在python上进行更多的阅读和学习。
祝你好运! :)