首页 > 解决方案 > 如何在 django 过滤期间添加分页

问题描述

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

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

谢谢你们..

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 

在我的 menu.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 %}

标签: pythondjango

解决方案


你需要使用request.GET. 所以当你输入 url 时 http://127.0.0.1:8000/menu/?tags=2&page=2。之后的部分?将导致request.GET. 假设,如果urls.py你有一个 url: path('menu',views.function,name='function')并且views.py你有一个函数:

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

在打印语句输出中,它将是一个带有键tagspage值的字典22分别是


推荐阅读