Python Django';非类型';对象没有属性'__获取项目';
我读了这篇文章 在视图中,我得到代码错误:total=query\u results['total'] 错误:“非类型”对象没有属性“getitem”Python Django';非类型';对象没有属性'__获取项目';,python,django,sphinx,django-sphinx,Python,Django,Sphinx,Django Sphinx,我读了这篇文章 在视图中,我得到代码错误:total=query\u results['total'] 错误:“非类型”对象没有属性“getitem” def search(request): if request.GET: form = SearchForm(request.GET) query = request.GET.get('q', '') s = SphinxClient() s.SetServer('local
def search(request):
if request.GET:
form = SearchForm(request.GET)
query = request.GET.get('q', '')
s = SphinxClient()
s.SetServer('localhost', 9312)
s.SetLimits(0, 16777215)
if s.Status():
query_results = s.Query(query)
total = query_results['total']
pages_id = [page['id'] for page in query_results['matches']]
if pages_id:
results = Page.objects.filter(id__in=pages_id)
else:
results = None
if results:
paginator = Paginator(results, 25)
page = request.GET.get('page')
try:
results = paginator.page(page)
except PageNotAnInteger:
results = paginator.page(1)
except EmptyPage:
results = paginator.page(paginator.num_pages)
return render(request, 'wiki/search.html',
{'results': results,'total': total,
'query': query, 'form': form})
else:
logger = logging.getLogger('helper')
logger.error('Sphinxsearch Error! %s' % s.GetLastError())
messages.add_message(request, messages.ERROR, 'Search server is '
'not responding. Administrator '
'has been informed.')
form = SearchForm()
return render(request, 'wiki/search.html', {'form': form})
else:
form = SearchForm()
return render(request, 'wiki/search.html', {'form': form})
回溯切换到复制和粘贴视图
/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py in
得到你的回应
response = wrapped_callback(request, *callback_args, **callback_kwargs)
...
▶ Local vars
/home/max/askmoiseev/ask/views.py in search
total = query_results['total']
...
▶ Local vars
请告诉我可能的错误是什么?我想您的查询结果是无
query_results = s.Query(query)
所以当你尝试访问
total = query_results['total']
您会收到\uuu getitem\uuuu
错误,因为None不是列表
下面是一个来自解释器的示例
>>> n = None
>>> n['b']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object has no attribute '__getitem__'
>>>
祝你好运,
Sam在尝试使用查询结果之前,您应该检查GetLastError,可能还有GetLastWarning,以确保查询成功 您可以找到查询失败的原因。如果api在失败时引发适当的异常,可能会更好,但事实并非如此 还有一点,你的设定值高得离谱,很可能是因为试图获得太多的结果而失败
实际上,您应该直接在sphinx中进行分页,只获取当前页面的ID,而不是获取所有ID,然后再获取页面 正如错误所说,
query\u results
是None。问题是我不理解query\u results为什么是None我不理解query\u results为什么是None,我遵循了文章sphinxsearch works,problem in view(((尝试在shell中运行它。我在上面添加了一个示例)。
s = SphinxClient()
s.SetServer('localhost', 9312)
s.SetLimits(0, 16777215)
query_results = s.Query(query)