【问题标题】:Django pagination in the same search page同一搜索页面中的 Django 分页
【发布时间】:2019-01-02 14:27:05
【问题描述】:

我在与搜索相同的页面中显示搜索结果。我正在尝试使用 django 中的分页来对我的结果进行分页。分页有效,除非我单击下一个或上一个,页面重新加载以从头开始。我知道我必须在模板中传递一些东西才能在页面之后添加,但我有点迷路了。 这是我的看法:

def lookup(request):
    if request.method == "POST":
        form = SearchForm(request.POST)
        now = datetime.datetime.now()
        if form.is_valid():
            l_city = request.POST['city']
            l_state = request.POST['state']
            l_country = request.POST['country']
            result_list = Listing.objects.filter(
            location_Country__icontains=l_country).filter(
            location_City__icontains=l_city).filter(
            location_State__icontains=l_state).order_by('listing_from_date')

            paginator = Paginator(result_list, 5)  # Show 5 contacts per page

            page = request.GET.get('page')
            try:
                result = paginator.page(page)
            except PageNotAnInteger:
                # If page is not an integer, deliver first page.
                result = paginator.page(1)
            except EmptyPage:
                # If page is out of range (e.g. 9999), deliver last page of results.
                result = paginator.page(paginator.num_pages)

            return render (request, 'lookup.html', {'result':result})

    empty_data = False
    return render (request, 'lookup.html', {'empty_data':empty_data})

这是我的模板代码:

{% for results in result %} display my list {%endfor%}
<div class="pagination">
    <span class="step-links">
        {% if result.has_previous %}
            <a href="?page={{ result.previous_page_number }}">previous</a>
        {% endif %}

        <span class="current">
            Page {{ result.number }} of {{ result.paginator.num_pages }}.
        </span>

        {% if result.has_next %}
            <a href="?page={{ result.next_page_number }}">next</a>
        {% endif %}
    </span>
</div>

我认为这与 POST 和 GET 的处理有关,我想通过 {{ result.net_page_number}} 传递一些东西,但我能传递什么? 谢谢。

【问题讨论】:

    标签: django pagination django-queryset


    【解决方案1】:
    def lookup(request):
        listing = Listing.objects.all()
    
        if not request.method == 'POST':
            if 'search-persons-post' in request.session:
                request.POST = request.session['search-persons-post']
                request.method = 'POST'
    
        if request.method == "POST":
            request.session['search-persons-post'] = request.POST
            form = SearchForm(request.POST)
            now = datetime.datetime.now()
            if form.is_valid():
                l_city = request.POST['city']
                l_state = request.POST['state']
                l_country = request.POST['country']
                result_list = Listing.objects.filter(country__icontains=l_country).filter(
                    city__icontains=l_city).filter(state__icontains=l_state).order_by('listing_from_date')
    
                paginator = Paginator(result_list, 5)  # Show 5 contacts per page
    
                page = request.GET.get('page')
                try:
                    result = paginator.page(page)
                except PageNotAnInteger:
                    # If page is not an integer, deliver first page.
                    result = paginator.page(1)
                except EmptyPage:
                    # If page is out of range (e.g. 9999), deliver last page of results.
                    result = paginator.page(paginator.num_pages)
    
                return render(request, 'lookup.html', {'result': result})
    
        empty_data = False
        return render(request, 'lookup.html', {'empty_data': empty_data})
    

    【讨论】:

    • 对不起,我没看懂程序,我也试着复制粘贴代码,但行为根本没有改变?顺便说一句,tot=listing.count() 的用途是什么?
    • 你需要页数还是?像这样 。如果代码(上面)不起作用,我会更新这个
    • 所以。我已经粘贴了工作代码,您只需复制粘贴即可。
    • 别忘了在你的 urls.py 中添加 csrf_exempt(loocup)
    • 在您的模板中添加:{% for i in result.paginator.page_range %} {% if users.number == i %}
    • {{ i }} (current)
    • {% else %}
    • {{ i }}
    • {% endif %} {% endfor %}
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签