Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django';非类型';对象没有属性'__获取项目';_Python_Django_Sphinx_Django Sphinx - Fatal编程技术网

Python Django';非类型';对象没有属性'__获取项目';

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

我读了这篇文章

在视图中,我得到代码错误: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('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)