Python 分页和筛选不需要';t与搜索结果Django配合使用
我已经在我的web应用程序中实现了一个过滤表单。我在HTML中实现了分页标记,导航按钮设置如下:Python 分页和筛选不需要';t与搜索结果Django配合使用,python,django,search,filter,pagination,Python,Django,Search,Filter,Pagination,我已经在我的web应用程序中实现了一个过滤表单。我在HTML中实现了分页标记,导航按钮设置如下: {% load pagination_tags %} {% block content%} <center> <h5> Search results for "{{search_query}}" </h5> </cent
{% load pagination_tags %}
{% block content%}
<center>
<h5>
Search results for "{{search_query}}"
</h5>
</center>
<br>
<div class="col">
<form method="get">
{{myFilter.form}}
<button class="btn btn-primary" type="submit">Filter</button>
</form>
<nav aria-label="Page navigation example">
<ul class="pagination">
<li class="page-item {% if not prev_page_url %} disabled {% endif %}">
<a class="page-link" href="?{% url_replace request 'page' prev_page_url %}" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
{% for n in page.paginator.page_range %}
{% if page.number == n %}
<li class="page-item active" aria-current="page">
<a class="page-link" href="?{% url_replace request 'page' n %}">{{ n }}
<span class="sr-only"></span>
</a></li>
{% elif n > page.number|add:-4 and n < page.number|add:4 %}
<li class="page-item">
<a class="page-link" href="?{% url_replace request 'page' n %}">{{ n }}</a>
</li>
{% endif %}
{% endfor %}
<li class="page-item {% if not next_page_url %} disabled {% endif %}">
<a class="page-link" href="?{% url_replace request 'page' next_page_url %}" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>
分页工作(格式为:http://localhost:8000/search_products/?search=XXX&?store=XXX&price_min=XXX&price_max=XXX/?page=2)但是单击按钮并不能正确更改url,只会删除找到的搜索结果并转到下一页过滤结果。我不知道这是为什么,但我认为这是href的问题,但我不知道如何解决它
意见如下:
def search_products(request):
search_query = request.GET.get('search', '')
products = Product.objects.filter(
Q(name__icontains=search_query) | Q(brand__icontains=search_query) | Q(store__icontains=search_query))
myFilter = ProductFilter(request.GET, queryset=products)
products = myFilter.qs
paginator = Paginator(products, 40)
page_number = request.GET.get('page', 1)
page = paginator.get_page(page_number)
if page.has_next():
next_url = page.next_page_number()
else:
next_url = ''
if page.has_previous():
prev_url = page.previous_page_number()
else:
prev_url = ''
return render(request, 'store/search_products.html',
context={'products': page.object_list, 'page': page, 'next_page_url': next_url,
'prev_page_url': prev_url, 'search_query': search_query, 'myFilter': myFilter})
过滤器设置在filters.py文件中:
class ProductFilter(django_filters.FilterSet):
store = django_filters.MultipleChoiceFilter(choices=store_choices)
brand = django_filters.MultipleChoiceFilter(choices=brand_choices)
price = django_filters.RangeFilter()
class Meta:
model = Product
fields = ['store', 'brand', 'price']
那个网址看起来不对。为什么里面有3个
?
?
class ProductFilter(django_filters.FilterSet):
store = django_filters.MultipleChoiceFilter(choices=store_choices)
brand = django_filters.MultipleChoiceFilter(choices=brand_choices)
price = django_filters.RangeFilter()
class Meta:
model = Product
fields = ['store', 'brand', 'price']