Django分页 - 5k对象

时间:2017-05-14 22:13:48

标签: django django-views django-pagination

作为此问题Django pagination with bootstrap的延续,我在“我的通讯录”应用下的任何作品都需要再次请求您的帮助。我有一个问题,我无法解决。我使用了一些建议about pagination,但所有改变的都是底层分页菜单。我的应用程序仍在每次加载所有5k对象,一遍又一遍。我是新手,这个应用程序是我的第一个项目,这是最后的'大'遗失的部分。当我完成时,我决定发布最终的锥形:) 最好的祝福。

views.py

def index(request):

    contacts_list = contacts.objects.all()
    contacts_filter = LFilter(request.GET, queryset=contacts_list)

    paginator = Paginator(contacts_list, 50)
    try:
        page = int(request.GET.get('page','1'))
    except:
        page = 1
    try:
        contacts = paginator.page(page)
    except PageNotAnInteger:
        contacts = paginator.page(1)
    except EmptyPage:
        contacts = paginator.page(paginator.num_pages)


    index = contacts.number - 1 
    max_index = len(paginator.page_range)
    start_index = index - 3 if index >= 3 else 0
    end_index = index + 3 if index <= max_index - 3 else max_index
    page_range = paginator.page_range[start_index:end_index]


    return render(
        request, 'index.html',
        context={'filter': contacts_filter,
                'contacts': contacts,
                'page_range': page_range, }
                )`

index.py

{% for obj in filter.qs %}        
    Code for contact information to display               
{% endfor %}       
<div class="prev_next">
    {% if contacts.has_previous %}
        <a class="prev btn btn-info" href="?page={{contacts.previous_page_number}}">Prev</a>
    {% endif %}
    {% if contacts.has_next %}
        <a class="next btn btn-info" href="?page={{contacts.next_page_number}}">Next</a>
    {% endif %}
    <div class="pages">
        <ul>
        {% for pg in page_range %}
            {% if contacts.number == pg %}
                <li><a href="?page={{pg}}" class="btn btn-default">{{pg}}</a></li>
            {% else %}
                <li><a href="?page={{pg}}" class="btn">{{pg}}</a></li>
            {% endif %}
        {% endfor %}
        </ul>
    </div>
    <span class="clear_both"></span>
</div>

0 个答案:

没有答案