Я пытаюсь настроить нумерацию страниц в своем проекте Django, но я не могу найти способ заставить фильтры (ptags в моем случае) следовать следующим страницам.
Ps;Я использую Django-haystack с огранкой для фильтрации.
У меня есть custom.py
from haystack.forms import FacetedSearchForm
class FacetedProductSearchForm(FacetedSearchForm):
def __init__(self, *args, **kwargs):
data = dict(kwargs.get("data", []))
self.ptag = data.get('ptags', [])
super(FacetedProductSearchForm, self).__init__(*args, **kwargs)
def search(self):
sqs = super(FacetedProductSearchForm, self).search()
if self.ptag:
query = None
for ptags in self.ptag:
if query:
query += u' OR '
else:
query = u''
query += u'"%s"' % sqs.query.clean(ptags)
sqs = sqs.narrow(u'ptags_exact:%s' % query)
return sqs
, который я передаю в своих представлениях:
class FacetedSearchView(BaseFacetedSearchView):
form_class = FacetedProductSearchForm
facet_fields = ['ptags']
template_name = 'search_result.html'
paginate_by = 3
context_object_name = 'object_list'
Вот мойfull search_result.html:
<div>
{% if page_obj.object_list %}
<ol class="row top20" id="my_list">
{% for result in page_obj.object_list %}
<li class="list_item">
<div class="showcase col-sm-6 col-md-4">
<div class="matching_score"></div>
<a href="{{ result.object.get_absolute_url }}">
<h3>{{result.object.title}}</h3>
<h5>{{ result.object.destination }}</h5>
<img src="{{ result.object.image }}" class="img-responsive">
</a>
<div class="text-center textio">
<ul class="tagslist">
<li class="listi">
{% for tags in result.object.ptags.names %}
<span class="label label-info"># {{ tags }}</span>
{% endfor %}
</li>
</ul>
</div>
</div>
</li>
{% endfor %}
</ol>
</div>
Я могу передать запрос, который является пунктом назначения, на следующую страницу, добавив его в нижней части моего html:
{% if is_paginated %}
<ul class="pagination pull-right">
{% if page_obj.has_previous %}
<li><a href="?q={{ query }}&page={{ page_obj.previous_page_number }}"><i class="fas fa-angle-left"></i>Previous page</a></li>
{% else %}
<li class="disabled"><span><i class="fas fa-angle-left"></i>Previous page</span></li>
{% endif %}
{% if page_obj.has_next %}
<li><a href="?q={{ query }}&page={{ page_obj.next_page_number }}">See more results<i class="fas fa-angle-right"></i></a></li>
{% else %}
<li class="disabled"><span>See more results<i class="fas fa-angle-right"></i></span></li>
{% endif %}
</ul>
{% endif %}
{% else %}
<p> Sorry, no result found for the search term <strong>{{query}} </strong></p>
{% endif %}
НоЕсли я пытаюсь добавить поле ptags в коде разбивки на страницы, выполнив команду & ptags следующим образом:
{% if is_paginated %}
<ul class="pagination pull-right">
{% if page_obj.has_previous %}
<li><a href="?q={{ query }}&ptags={{page_obj.ptags.name}}&page={{ page_obj.previous_page_number }}"><i class="fas fa-angle-left"></i>Previous page</a></li>
{% else %}
<li class="disabled"><span><i class="fas fa-angle-left"></i>Previous page</span></li>
{% endif %}
{% if page_obj.has_next %}
<li><a href="?q={{ query }}&ptags={{page_obj.ptags.name}}&page={{ page_obj.next_page_number }}">See more results<i class="fas fa-angle-right"></i></a></li>
{% else %}
<li class="disabled"><span>See more results<i class="fas fa-angle-right"></i></span></li>
{% endif %}
</ul>
{% endif %}
{% else %}
<p> Sorry, no result found for the search term <strong>{{query}} </strong></p>
{% endif %}
Я получаю эту ошибку, когда перехожу на страницу 2, а выбранные фильтры флажков (ptags) не отображаются:
Page not found (404)
Request Method: GET
Request URL: http://localhost:8000/search/?q=las%20vegas&ptags=&page=2
Raised by: search.views.FacetedSearchView
Как это исправить?