简体   繁体   English

如何在 django 过滤期间添加分页

[英]How to add pagination during filtered in django

my url appear like this '''http://127.0.0.1:8000/menu/?[%27tags%27,%20%271%27]&page=2'''我的 url 看起来像这样 '''http://127.0.0.1:8000/menu/?[%27tags%27,%20%271%27]&page=2'''

I want to make 'http://127.0.0.1:8000/menu/?tags=2&page=2'我想做'http://127.0.0.1:8000/menu/?tags=2&page=2'

Thank you all..谢谢你们..

munu_extras.py munu_extras.py

from django import template
from ..models import Menu
register = template.Library()


@register.simple_tag
def my_url(value,field_name,urlencode=None):
    url = "{}={}".format(field_name,value )


    if urlencode:
        querystring = urlencode.split('=')
        filtered_querystring = filter(lambda p: p.split('=')[0]!=field_name, querystring)
        print(filtered_querystring)
        encode_querystring = '='.join(filtered_querystring)
        url = '?{}&{}'.format(querystring,url)

        
    return url 

In My menu.html在我的菜单中。html

        {% if menus.has_previous %}
            <a href="{% my_url 1 'page' request.GET.urlencode %}"><<<</a>
            <a href="{% my_url menus.previous_page_number 'page' request.GET.urlencode %}"><<</a>
        {% endif %}

        {% if menus.has_next %}
            <a href="{% my_url menus.next_page_number 'page' request.GET.urlencode %}">>></a>
            <a href="{% my_url menus.paginator.num_pages 'page' request.GET.urlencode %}">>>></a>
        {% endif %}

You need to use request.GET .您需要使用request.GET So when you enter the url http://127.0.0.1:8000/menu/?tags=2&page=2 .所以当你输入 url http://127.0.0.1:8000/menu/?tags=2&page=2时。 The part after the ?后面的部分? will be resulted in request.GET .将导致request.GET Suppose, if your urls.py , you have a url: path('menu',views.function,name='function') and in views.py you have a function:假设,如果你的urls.py ,你有一个 url: path('menu',views.function,name='function')并且在views.py你有一个 ZC1C425268E68384FAB11

def function(request):
    print(request.GET)
    return HttpResponse('success')

In the print statement output, it will be a dictionary with keys tags and page with values 2 and 2 respectively在打印语句 output 中,它将是带有键tags的字典和分别具有值22page

You are splitting the url-encoded GET parameters on = instead of & , and various similar mistakes.您将 url 编码的 GET 参数拆分为=而不是& ,以及各种类似的错误。

@register.simple_tag
def my_url(value, field_name, urlencode=None):
    url = "?{}={}".format(field_name, value)

    if urlencode:
        querystring = urlencode.split('&')
        filtered_querystring = filter(lambda p: p.split('=')[0] != field_name, querystring)
        encoded_querystring = '&'.join(filtered_querystring)
        url = '{}&{}'.format(url, encoded_querystring)
    return url

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM