2010-12-01 1 views
0

Я пытаюсь использовать BuildExcerpts в django sphinx. Моя точка зрения выглядит примерно так:django-sphinx BuildExcerpts

q = request.GET.get('q', '') 

my_model_list = MyModel.search.query(q).set_options(passages=True, passages_opts={ 
         'before_match':"<font color='red'>", 
         'after_match':'</font>', 
         'chunk_separator':' ... ', 
         'around':6, 
         }) 

Когда я запускаю это я получаю AssertionError

Вот след:

Traceback: 
File "C:\Python25\lib\site-packages\django\core\handlers\base.py" in get_response 
    100.      response = callback(request, *callback_args, **callback_kwargs) 
File "C:\django\myproject\myapp\views.py" in home_page 
    81.    my_model_list = remove_duplicates(list(my_model_list)) 
File "c:\python25\lib\site-packages\django_sphinx-2.2.3-py2.5.egg\djangosphinx\models.py" in __iter__ 
    243.   return iter(self._get_data()) 
File "c:\python25\lib\site-packages\django_sphinx-2.2.3-py2.5.egg\djangosphinx\models.py" in _get_data 
    422.    self._result_cache = list(self._get_results()) 
File "c:\python25\lib\site-packages\django_sphinx-2.2.3-py2.5.egg\djangosphinx\models.py" in _get_results 
    603.        r['passages'] = self._get_passages(queryset[r['id']], results['fields'], words) 
File "c:\python25\lib\site-packages\django_sphinx-2.2.3-py2.5.egg\djangosphinx\models.py" in _get_passages 
    657.   passages_list = client.BuildExcerpts(docs, self._index, words, opts) 
File "C:\Python25\lib\site-packages\django_sphinx-2.2.3-py2.5.egg\djangosphinx\apis\api278\__init__.py" in BuildExcerpts 
    791.   assert(isinstance(doc, str)) 

Exception Type: AssertionError at/
Exception Value: 

Я не совсем уверен, что происходит. У кого-нибудь есть опыт?

Я использую django 1.2.3, Sphinx 0.9.9 и django-sphinx 2.2.3.

ответ

1

Для других, у кого есть подобные проблемы, вот что я должен был сделать, чтобы исправить это.

Перейдите в папку установки django-sphinx и откройте models.py. В строке 650, вам нужно заменить эти две строки:

docs = [getattr(instance, f) for f in fields] 
if isinstance(self._passages_opts, dict): 

с

docs = [getattr(instance, f) for f in fields] 

for index, doc in enumerate(docs): 
    if (not (isinstance(doc, str)) and (not isinstance(doc, unicode))): 
         docs[index] = repr(doc) 

    if isinstance(self._passages_opts, dict): 

Тогда вы можете получить доступ к отрывки, как это на ваш взгляд:

for r in results_set: 
    print r.sphinx.get('passages') 

или в шаблоне например:

{{record.sphinx.passages.content|safe}} 
+0

Похож на источник для этого исправления находится здесь: https://groups.google.com/forum/#!msg/django-sphinx/WNL3a5h3MU8/nlGpujbfMEYJ – mlissner 2011-03-13 08:30:56