Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 分页和筛选不需要';t与搜索结果Django配合使用_Python_Django_Search_Filter_Pagination - Fatal编程技术网

Python 分页和筛选不需要';t与搜索结果Django配合使用

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

我已经在我的web应用程序中实现了一个过滤表单。我在HTML中实现了分页标记,导航按钮设置如下:

{% 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">&laquo;</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">&raquo;</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']