2017-10-09 142 views
0
下一页

上的内容我使用Django分页程序来打破我的搜索结果Django的分页程序不提供

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 

在我看来几页,我进行基于输出形式的搜索

@login_required 
def payment_range_list(request): 
    #import pdb; pdb.set_trace() 

    title = 'payment list' 
    #import pdb; pdb.set_trace() 
    if request.method == "POST": 
     form = PaymentRangeForm(request.POST) 
     #import pdb; pdb.set_trace() 

     if form.is_valid(): 
      start_date = form.cleaned_data['start_date'] 
      end_date = form.cleaned_data['end_date'] 
      building = form.cleaned_data['building'] 

      payment_list = LeasePaymentFilter(request.GET, queryset=LeasePayment.objects.filter(payment_date__range=[start_date, end_date],lease__unit__building = building)) 
      paginator = Paginator(payment_list, 25) # Show 25 contacts per page 

      page = request.GET.get('page') 
      try: 
       payment_page = paginator.page(page) 
      except PageNotAnInteger: 

       payment_page = paginator.page(1) 
      except EmptyPage: 

       payment_page = paginator.page(paginator.num_pages) 
     else: 
      payment_list = None 
      payment_page = None 
      start_date = None 
      end_date = None 
      building = None 



    else: 
     payment_list = None 
     payment_page = None 
     start_date = None 
     end_date = None 
     building = None 

     #form = PaymentRangeForm() 
     form = PaymentRangeForm(initial = {'building': 0 }) 



    return render(request,'payment/payment_range.html', {'form':form, 'payment': payment_list,'page_payment':payment_page, 'start_date':start_date, 'end_date':end_date, 'building':building }) 

在页面的顶部,我有一个表单用于搜索,第二部分用于显示结果。

{% extends "rent_base.html" %} 

{% load crispy_forms_tags %} 
    {% block title %} 
    Lease List 
    {% endblock title %} 
{% block content %} 

<div class="container-fluid"> 





<div class="row"> 
    <div class="col-sm-10 col-sm-offset-1 hid"> 
        <h4 class="display-4">List > Payments> by Date Range </h4><div style="float:right;"> <a href="{% url 'export_payment_range_csv' start_date=start_date end_date=end_date building=building %}" class="btn btn-info" role="button">CSV for current range payments</a></div> 
    </div>    
</div> 








<div class="row"> 
<div class="col-sm-10 col-sm-offset-1 hid"> 



    <form method="POST" class="form" action="" method="get"> 
       {% csrf_token %} 
       {{ form|crispy}} 
       <br> 
       <button type="submit" class="btn btn-primary btn-primary">Search</button> 
    </form> 

      <br> 
      <b>Start date:</b> {{ start_date }} <b>End date:</b>{{ end_date }} 
      <br> 
<table class="table table-striped"> 




     <tr> 

       <th># Payment</th> 
       <th>Payment type</th> 
       <th>Amount </th> 
       <th>Deposit</th> 
       <th>Lease</th> 
       <th>Unit</th> 
       <th>Building</th> 
       <th>Term</th> 
       <th>Payment date</th> 
       <th>Payment method</th> 
     </tr> 



      {% for payment in page_payment %} 
     <tr> 
      <td> <a href="{% url 'lease_payment_details' pk=payment.lease.id %}" class="btn btn-default"> {{ payment.id }}</a></td> 
      <td> {{ payment.get_payment_type_display }}</td> 
      <td> {{ payment.amount }}</td> 
      <td>  
         {% if payment.is_deposit %} 
               <span class="glyphicon glyphicon-ok text-success" aria-hidden="true" ></span> 
              {% else %} 
               <span class="glyphicon glyphicon-remove text-warning" aria-hidden="true" ></span> 
           {% endif %} 
      </td> 

      <td> {{ payment.lease }}</td> 
      <td> {{ payment.lease.unit.number }}</td> 
      <td> {{ payment.lease.unit.building.name }}</td> 
      <td> {{ payment.leaseterm }}</td> 
      <td> {{ payment.payment_date }}</td> 
      <td> {{ payment.get_method_display }}</td> 
     </tr> 
      {% endfor %} 
</table> 
<div class="pagination"> 
    <span class="step-links"> 
     {% if page_payment.has_previous %} 
      <a href="?page={{ page_payment.previous_page_number }}">previous</a> 
     {% endif %} 

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

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


    </div> 
</div></div> 
{% endblock content %} 

我的问题是,当我的搜索返回的结果超过1页的数量,我点击下一页。接下来的页面总是空的。

任何反馈,我的问题是?

回答

1

问题是您的serch表单是POST。所以当你点击下一步按钮时你发送GET请求并if request.method == "POST":部分你查看不会被触发。 我建议你改变serch主页形式GET:

<form method="GET" action=""> 
    <input type="text" name="q" placeholder="Search" value="{{ request.GET.q }}"> 
    <input type="submit" value="Search"> 
</form> 

,并更改下一个按钮这样的:

{% if payment.has_next %} 
     <a href="?page={{ payment.next_page_number}}{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">next</a> 
{% endif %} 

这将节省搜索值在地址栏中你移动到下一个页面后还是一样。

相关问题