【问题标题】:Django pagination + filterDjango分页+过滤器
【发布时间】:2018-05-11 12:39:32
【问题描述】:

我在使用分页和过滤时遇到问题。 我在 CBV(ListView) 中使用django-filter 过滤和分页器。 一切正常。分页器过滤后将盒子包裹起来,问题出在模板中分页器的按钮上。当您按 NEXT 或 PREV 过滤器被重置。我找到了解决方案:

<span><a href="?page={{ page_obj.previous_page_number }}
     {% for key,value in request.GET.items %}
          {% ifnotequal key 'page' %}&{{ key }}={{ value }}{% endifnotequal %}
     {% endfor %}">Previous</a>
</span>

但这并不能完全解决问题,所以我可以从我的过滤器发送请求:

?item_title=&description=&ordering=&popular=&min_price=&max_price=&category_brands=11&category_brands=13

因为我在 url 中有两个 category_brands= 并且这个解决方案不起作用,因为我不能有两个相同的键。请帮帮我。

【问题讨论】:

  • 我认为问题出在参数的组织上:?item_title=&amp;description=&amp;ordering=&amp;popular=&amp;min_price=&amp;max_price=&amp;category_brands=11&amp;category_brands=13。搜索一下与此相关的。 =&amp; 看起来很奇怪...
  • Hi, & - 所以有点像从查询字段中粘贴值。如果过滤器中的值为 ==> min_price=1&category_brands=13 并且如果不是 min_price=&category_brands
  • 只是我指出的方式不适合这里,也许还有另一种解决方案,如何将分页与过滤器结合起来,并且它们不会相互重叠
  • 我认为您必须为您的属性设置值。例如:item_title=some_value_here&amp;description=another_value&amp;ordering=some_value&amp;....

标签: django url pagination django-filter


【解决方案1】:

找到了解决办法: //tamplate_tag

@register.simple_tag(takes_context=True)
def url_replace(context, **kwargs):
query = context['request'].GET.copy()

for kwarg in kwargs:
    try:
        query.pop(kwarg)
    except KeyError:
        pass

query.update(kwargs)

return mark_safe(query.urlencode())

在模板中:

{% load <your_templatetag_name> %}
...
<a href="?{% url_replace page=page_obj.previous_page_number %}">Previous</a>
...
<a href="?{% url_replace page=page_obj.next_page_number %}">Next</a>

它对我有用。

【讨论】:

    猜你喜欢
    • 2019-08-17
    • 2019-08-14
    • 2018-07-10
    • 2019-02-21
    • 2023-03-06
    • 2019-07-11
    • 2019-09-29
    • 1970-01-01
    • 2018-12-25
    相关资源
    最近更新 更多