簡體   English   中英

'NoneType'類型的Django分頁對象沒有len()

[英]Django Pagination object of type 'NoneType' has no len()

view.py

def search(request):
    query_string = ''
    found_entries = None
    if ('q' in request.GET) and request.GET['q'].strip():
        query_string = request.GET['q']
        entry_query = get_query(query_string, ['id', 'sample_name'])
        found_entries = Sample.objects.filter(entry_query).exclude(status_id=3).order_by('id')

    paginator = Paginator(found_entries, 30)
    page = request.GET.get('page')
    try:
        sample = paginator.page(page)
    except PageNotAnInteger:
        sample = paginator.page(1)
    except EmptyPage:
        sample = paginator.page(paginator.num_pages)
    return render_to_response('search_results.html', { 'sample' : sample })

search_result.html

{% extends 'base.html' %}
{% block content %}
<table class="reference" style="width:100%">
<tr>
    <th>Tracking ID</th>
    <th>Sample Name</th>
    <th>External ID</th>
    <th>Owner Name</th>
    <th>Custodian Name</th>
    <th>Feedstock</th>
    <th>Treatment</th>
    <th>Fraction</th>
    <th>Create Date</th>
    <th>Update</th>
    <th>Delete</th>
</tr>

{% for result in sample %}
<tr>
    <td>{{result.id}}</td>
    <td>{{result.sample_name}}</td>
    <td>{{result.external_id}}</td>
    <td>{{result.owner_name}}</td>
    <td>{{result.custodian_name}}</td>
    <td>{{result.feedstock.feedstock_name}}</td>
    <td>{{result.treatment.treatment_name}}</td>
    <td>{{result.fraction.fraction_name}}</td>
    <td>{{result.create_date}}</td>
    <td><a href="/sdms/update/{{result.id}}">update</a></td>
    <td><a href="/sdms/delete/{{result.id}}">delete</a></td>
</tr>

{% endfor %}
<div class="pagination">
<span class="step-links">
    {% if sample.has_previous %}
        <a href="?page={{ sample.previous_page_number }}">previous</a>
    {% endif %}

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

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

初始頁面顯示正確。 它有30個項目顯示在表格中。 它還顯示10頁中的1頁,其中包含下一頁的鏈接。 當我點擊鏈接時出現錯誤:“NoneType”類型的對象沒有len()

這是追溯:

File "c:\python27\lib\site-packages\django-1.7.1-py2.7.egg\django\core\handlers\base.py" in get_response
111. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\vtran.NREL_NT\PycharmProjects\sdms\sdms\sample\views.py" in search
66. sample = paginator.page(page)
File "c:\python27\lib\site-packages\django-1.7.1-py2.7.egg\django\core\paginator.py" in page
50. number = self.validate_number(number)
File "c:\python27\lib\site-packages\django-1.7.1-py2.7.egg\django\core\paginator.py" in validate_number
39. if number > self.num_pages:
File "c:\python27\lib\site-packages\django-1.7.1-py2.7.egg\django\core\paginator.py" in _get_num_pages
86. if self.count == 0 and not self.allow_empty_first_page:
File "c:\python27\lib\site-packages\django-1.7.1-py2.7.egg\django\core\paginator.py" in _get_count
77. self._count = len(self.object_list)

您的next鏈接不包含查詢字符串,因此當您單擊它時,生成的下一個請求將離開found_entries = None ,然后您將其傳遞到期望項目列表的Paginator

您已將鏈接設置為?page=whatever 所以你只是在鏈接中發送頁碼。 但是您的視圖會檢查是否存在q參數,並且只有在它存在時才會覆蓋found_entries的值。

您需要在下一頁/上一頁鏈接中保留q參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM