0

J'utilise haystack avec whoosh, et django 1.3. Dans mon URL je:Django-haystack et django-pagination ne fonctionnent pas ensemble?

url(r'^search/', include('haystack.urls')), 

J'ai créé modèle personnalisé dans l'application: Recherche/seach.html:

{% if page.object_list %}               

{% autopaginate page.object_list 3 %} 
{% for arg in page.object_list %} 
... 
{% endfor%} 
{% paginate %} 

Ma recherche fonctionne très bien! La pagination rendue également (avec paginate templatetag) est correcte. Mais quand j'essaie d'aller à la page suivante, j'obtiens cette erreur:

Page not found (404) 
Request Method:  GET 
Request URL: http://127.0.0.1:8000/search/?page=2&q=Aktualno%C5%9B%C4%87 

Pouvez-vous m'aider? Qu'est-ce qui ne va pas?

Répondre

1

Le haystack par défaut du page de SearchView ne prend pas en charge django-pagination. Si vous souhaitez utiliser django-pagination, vous pouvez Hériter le SearchView et ajouter une nouvelle variable de contexte pour stocker le résultat de la recherche. Et puis vous pouvez utiliser cette variable de contexte pour la pagination.

def create_response(self): 
    (paginator, page) = self.build_page()   
    context = { 
     'query': self.query, 
     'form': self.form, 
     'page': page, 
     'results': self.results, 
     'paginator': paginator, 
     'suggestion': None, 
     } 
2

J'ai fait le travail django-botte de foin et django-en utilisant une pagination SearchView personnalisée qui étend la SearchView de django-botte de foin. Il suffit de commenter ou de supprimer le (paginator, page) = self.build_page() et la variable de contexte page et paginateur.

Ci-dessous est mon SearchView personnalisé.

class SearchView(SearchView): 

def create_response(self): 
    """ 
    Generates the actual HttpResponse to send back to the user. 
    """ 
    # (paginator, page) = self.build_page() 

    context = { 
     'query': self.query, 
     'form': self.form, 
     # 'page': page, 
     # 'paginator': paginator, 
     'suggestion': None, 
     'results': self.results 
    } 

    if self.results and hasattr(self.results, 'query') and self.results.query.backend.include_spelling: 
     context['suggestion'] = self.form.get_suggestion() 

    context.update(self.extra_context()) 
    return render_to_response(self.template, context, context_instance=self.context_class(self.request)) 

et dans le modèle paginate en utilisant la variable de contexte de résultats:

{% autopaginate results 2 %} 
    {% for result in results %} 
     {{ result.attribute }} 
    {% endfor %} 
    {% paginate %} 

Thats it :)

1

Dans Django 1.8.4 il suffit de remplacer la page pour page_obj dans votre modèle.

Exemple:

{% for arg in page_obj.object_list %} 
Questions connexes