【问题标题】:Filter the number of pages not working django过滤不工作的页面数量 django
【发布时间】:2021-11-27 03:59:52
【问题描述】:

我有一个页面,它将以表格的形式显示我的数据库中的详细信息,我正在进行过滤,因此当列表变得很长时,至少它可以分成不同的页面而不是用户滚动通过,但我试过了,没有任何结果,不确定我是否正确。

这是我想要的,如下图所示,但没有显示。

ViewMCO.html

    {% extends "customerbase.html" %}
    {% block content %}
    <style>
    table {
        border-collapse:separate;
        border:solid black 1px;
        border-radius:6px;
        -moz-border-radius:6px;
    }
    
    td, th {
        border-left:solid black 1px;
        border-top:solid black 1px;
    }
    
    th {
        border-top: none;
    }
    
    td:first-child, th:first-child {
         border-left: none;
    }

    
    
    
    </style>
    <script>
      
    
     // Function to download table data into csv file
            function download_table_as_csv(table_id, separator = ',') {
                var rows = document.querySelectorAll('table#' + table_id + ' tr');
                var csv = [];
                for (var i = 0; i < rows.length; i++) {
                    var row = [], cols = rows[i].querySelectorAll('td, th');
                    for (var j = 0; j < cols.length; j++) {
                        var data = cols[j].innerText.replace(/(\r\n|\n|\r)/gm, '').replace(/(\s\s)/gm, ' ')
                        data = data.replace(/"/g, '""');
                        row.push('"' + data + '"');
                    }
                    csv.push(row.join(separator));
                }
                var csv_string = csv.join('\n');
                var filename = 'export_' + table_id + '_' + new Date().toLocaleDateString() + '.csv';
                var link = document.createElement('a');
                link.style.display = 'none';
                link.setAttribute('target', '_blank');
                link.setAttribute('href', 'data:text/csv;charset=utf-8,' + encodeURIComponent(csv_string));
                link.setAttribute('download', filename);
                document.body.appendChild(link);
                link.click();
                document.body.removeChild(link);
            };
    
    </script>
    
    
       <div style="padding-left:16px">
         <br>
    
    
     <div class="form-block">
         <h6>Search for Part Number/ Serial Number/ Reception Number/ MCO Number/ Customer Name/ Status</h6>
        <form class="form-inline my-2 my-lg-0" action="{% url 'ViewMCO' %}" method='GET' value='{{ request.GET.q }}'>
            <input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search" name="q" value='{{ request.GET.q }}'/>
            <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
        </form>
         <br>
       <table id="viewTable" class="m-2">
            <i class="fa fa-download" aria-hidden="true"></i>
                <a href="#" onclick="download_table_as_csv('viewTable');">Download as CSV</a>
           <br>
    
      <tr class="header">
        <th>Latest Log</th>
          <th>Part Number</th>
          <th>Serial Number</th>
          <th>Reception Number</th>
          <th>MCO Number</th>
          <th>Customer Name</th>
          <th>Status</th>
          <th>Action</th>
      </tr>
             {% for photo in allusername %}
    
    
      <tr>
            <td>{{photo.Datetime}}</td>
          <td>{{photo.partno}}</td>
          <td>{{photo.serialno}}</td>
          <td>{{photo.reception}}</td>
          <td>{{photo.mcoNum}}</td>
          <td>{{photo.Customername}}</td>
          <td>{{photo.status}}</td>


          <td>
          <form action="{% url 'customerdetails' photo.id %}" method="post">
              {% csrf_token %}
          <button type="submit" class="btn btn-sm btn-info">View</button>
          </form>
          </td>
      </tr>
    
    {% endfor %}
    
    </table>
         <br>
    {% if allusername.has_other_pages %}
  <ul class="pagination">
    {% if allusername.has_previous %}
      <li><a href="?page={{ allusername.previous_page_number }}">&laquo;</a></li>
    {% else %}
      <li class="disabled"><span>&laquo;</span></li>
    {% endif %}
    {% for i in allusername.paginator.page_range %}
      {% if allusername.number == i %}
        <li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
      {% else %}
        <li><a href="?page={{ i }}">{{ i }}</a></li>
      {% endif %}
    {% endfor %}
    {% if allusername.has_next %}
      <li><a href="?page={{ allusername.next_page_number }}">&raquo;</a></li>
    {% else %}
      <li class="disabled"><span>&raquo;</span></li>
    {% endif %}
    </ul>
    {% endif %}

    
    
    </div>
       </div>

{% endblock %}

views.py

@login_required()
def ViewMCO(request):
    search_post = request.GET.get('q')
    if (search_post is not None) and search_post:
        allusername = Photo.objects.filter(Q(reception__icontains=search_post) | Q(partno__icontains=search_post) | Q(
            Customername__icontains=search_post) | Q(mcoNum__icontains=search_post) | Q(status__icontains=search_post)
                                           | Q(serialno__icontains=search_post))
        if not allusername:
            allusername = Photo.objects.all().order_by("-Datetime")

    else:
        allusername = Photo.objects.all().order_by("-Datetime")
        page = request.GET.get('page', 1)
        paginator = Paginator(allusername, 10)
        try:
            allusername = paginator.page(page)
        except PageNotAnInteger:
            allusername = paginator.page(1)
        except EmptyPage:
            allusername = paginator.page(paginator.num_pages)



    context = {'allusername': allusername}
    return render(request, 'ViewMCO.html', context)

【问题讨论】:

  • 可能是因为q有值时没有分页?
  • 我将它用于我的搜索栏,不知道它是否会影响?
  • 如果您的搜索栏中没有任何内容,它是否有效?
  • 意思是我删除了q码?
  • 啊不,我的意思是让视图进程成为else 部分。如果您的视图通过if (search_post is not None) and search_post,则没有进行分页

标签: html django django-views django-templates paginator


【解决方案1】:

在您的views.py中存在缩进问题,您应该在模板中传递search_post

@login_required()
def ViewMCO(request):
    search_post = request.GET.get('q')
    if (search_post is not None) and search_post:
        allusername = Photo.objects.filter(Q(reception__icontains=search_post) | Q(partno__icontains=search_post) | Q(
            Customername__icontains=search_post) | Q(mcoNum__icontains=search_post) | Q(status__icontains=search_post)
                                           | Q(serialno__icontains=search_post))
        if not allusername:
            allusername = Photo.objects.all().order_by("-Datetime")
        page = request.GET.get('page')
        paginator = Paginator(allusername, 10)
        try:
            allusername = paginator.page(page)
        except PageNotAnInteger:
            allusername = paginator.page(1)
        except EmptyPage:
            allusername = paginator.page(paginator.num_pages)



        context = {'allusername': allusername,'query':search_post}
        return render(request, 'ViewMCO.html', context)
    else:#if search_post is None 
        return redirect('somewhere')
   

现在在您的模板中有工作要做。
改变这个

 {% if allusername.has_other_pages %}
  <ul class="pagination">
    {% if allusername.has_previous %}
      <li><a href="?page={{ allusername.previous_page_number }}">&laquo;</a></li>
    {% else %}
      <li class="disabled"><span>&laquo;</span></li>
    {% endif %}
    {% for i in allusername.paginator.page_range %}
      {% if allusername.number == i %}
        <li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
      {% else %}
        <li><a href="?page={{ i }}">{{ i }}</a></li>
      {% endif %}
    {% endfor %}
    {% if allusername.has_next %}
      <li><a href="?page={{ allusername.next_page_number }}">&raquo;</a></li>
    {% else %}
      <li class="disabled"><span>&raquo;</span></li>
    {% endif %}
    </ul>
    {% endif %}

 {% if allusername.has_other_pages %}
  <ul class="pagination">
    {% if allusername.has_previous %}
      <li><a href="?q={{ query|urlencode }}&page={{ allusername.previous_page_number }}">&laquo;</a></li>
    {% else %}
      <li class="disabled"><span>&laquo;</span></li>
    {% endif %}
    {% for i in allusername.paginator.page_range %}
      {% if allusername.number == i %}
        <li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
      {% else %}
        <li><a href="?q={{ query|urlencode }}&page={{ i }}">{{ i }}</a></li>
      {% endif %}
    {% endfor %}
    {% if allusername.has_next %}
      <li><a href="?q={{ query|urlencode }}&page={{ allusername.next_page_number }}">&raquo;</a></li>
    {% else %}
      <li class="disabled"><span>&raquo;</span></li>
    {% endif %}
    </ul>
    {% endif %}

我在分页中的变化是我在模板中传递了“查询”并且我使用了 urlencode。

【讨论】:

  • 可能会添加一个处理 search_post = request.GET.get('q') 何时返回 None
  • 仍然不工作,我知道为什么它不显示
  • @Shadowwalker 确保有足够的数据并准确地写出我在这里写的内容。它应该可以工作。
  • 足够的数据作为平均值?
  • paginator = Paginator(allusername, 10) 确保至少有 11,因为如果它小于 10,那么 padignation 看不到。你可以通过输入 1 来更改 10 并测试它。跨度>
猜你喜欢
  • 2013-07-12
  • 2019-03-18
  • 2021-02-10
  • 2020-01-28
  • 1970-01-01
  • 2013-12-04
  • 2021-07-16
  • 2016-11-09
  • 1970-01-01
相关资源
最近更新 更多