繁体   English   中英

Django Paginator-我在继承自Paginator的类中创建了一个函数,以及为什么不能在前端使用此函数

[英]Django Paginator - I create a function in a class inherting from Paginator and why I can't use this function in front-end

我是Django的新手,我想在前端使用pager_num_range来显示页码,但是前端无法识别pager_num_range,我不知道为什么。

后端代码(我编写这些代码是为了学习Paginator):

USER_LIST = []
for i in range(1, 999):
    temp = {'name': 'root' + str(i), 'age': i}
    USER_LIST.append(temp)

class CustomPaginator(Paginator):
def __init__(self,*args,**kwargs):
    super(CustomPaginator, self).__init__(*args, **kwargs)

def pager_num_range(self):
    return range(1,2)


def index1(request):
    current_page = request.GET.get('p')
    paginator = Paginator(USER_LIST, 10)
    try:
        posts = paginator.page(current_page)
    except PageNotAnInteger:
        posts = paginator.page(1)
    except EmptyPage:
        posts = paginator.page(paginator.num_pages)

return render(request,'index1.html',{'posts':posts})

前端代码:

<ul>
    {% for row in posts.object_list %}
        <li>{{ row.name }}-{{ row.age }}</li>
    {% endfor %}
</ul>

{% if posts.has_previous %}
    <a href="/index1.html?p={{ posts.previous_page_number }}">Last Page</a>
    {% else %}
    <a href="#">Next Page</a>
{% endif %}

{% for i in posts.paginator.pager_num_range %}
{% endfor %}

{% if posts.has_next %}
<a href="/index1.html?p={{ posts.next_page_number }}">Next Page</a>
{% endif %}

<span>
    {{ posts.number }}/{{ posts.paginator.num_pages }}
</span>

</body>

这是urls.py文件:

urlpatterns = [
    path('admin/', admin.site.urls),

    path('index',views.index),
    path('index1',views.index1),
]

urlpatterns = [ path('admin/', admin.site.urls), 
                path('index.html',views.index), 
                path('index1.html',views.index1), ]

如果您添加新方法或覆盖方法,则应尝试此操作,这意味着应根据源代码返回有效值

    class CustomPaginator(Paginator):
    def __init__(self,*args,**kwargs):
        super(CustomPaginator, self).__init__(*args, **kwargs)

    @property
    def pager_num_range(self):
        """
        Return a 1-based range of pages for iterating through within
        a template for loop.
        """
        return range(1, self.num_pages + 1)


def index(request):
    USER_LIST = []
    for i in range(1, 53):
        temp = {'name': 'root' + str(i), 'age': i}
        USER_LIST.append(temp)
    current_page = request.GET.get('p')
    paginator = CustomPaginator(USER_LIST, 10)
    try:
        posts = paginator.page(current_page)
    except PageNotAnInteger:
        posts = paginator.page(1)
    except EmptyPage:
        posts = paginator.page(paginator.num_pages)

    return render(request,'polls/index.html',{'posts':posts})

在html中使用此

<ul>
    {% for row in posts.object_list %}
        <li>{{ row.name }}-{{ row.age }}</li>
    {% endfor %}
</ul>

{% if posts.has_previous %}
    <a href="/?p={{ posts.previous_page_number }}">Last Page</a>
    {% else %}
    <a href="#">Next Page</a>
{% endif %}

{% for i in posts.paginator.pager_num_range %}
{% if posts.number == i %}
<li class="active"><span>{{ i }} <span>(current)</span></span></li>
{% else %}
<li><a href="?p={{ i }}">{{ i }}</a></li>
{% endif %}
{% endfor %}

{% if posts.has_next %}
<a href="/?p={{ posts.next_page_number }}">Next Page</a>
{% endif %}

<span>
    {{ posts.number }}/{{ posts.paginator.num_pages }}
</span>

在网址中

url(r'^$', views.index, name='index'),

暂无
暂无

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

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