2010-12-01 5 views
0

J'essaie d'utiliser BuildExcerpts dans django sphinx. Mon point de vue ressemble à ceci: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, 
         }) 

Quand je lance ce que je reçois un AssertionError

Voici la trace:

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: 

Je ne suis pas vraiment sûr de ce qui se passe. Quelqu'un a une expérience avec ça? J'utilise django 1.2.3, Sphinx 0.9.9 et django-sphinx 2.2.3.

Répondre

1

Pour les autres qui ont des problèmes similaires, voici ce que je devais faire pour le réparer.

Accédez au dossier d'installation de django-sphinx et ouvrez models.py. Sur la ligne 650, vous devez remplacer ces deux lignes:

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

avec

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): 

Ensuite, vous pouvez accéder à vos extraits comme ceci dans votre vue:

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

ou dans le modèle comme ceci:

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

Ressemble à la source pour ce correctif est ici: https://groups.google.com/forum/#!msg/django-sphinx/WNL3a5h3MU8/nlGpujbfMEYJ – mlissner