【问题标题】:Django paginator page return NoneTypeDjango 分页器页面返回 NoneType
【发布时间】:2019-04-01 11:40:58
【问题描述】:

我正在使用 Django 进行简单搜索,并使用内置分页对结果进行分页,当我单击下一步查看下一页结果时出现此错误,int() 参数必须是字符串,类似字节对象或数字,而不是“NoneType” 不知道是什么原因,这里是代码,q是查询字符串

def result(request):
    try:
        q = request.GET.get('q')
        orders = Order.objects.filter(Q(flat_number=int(q)) | Q(customer_contact=int(q)))
        paginator = Paginator(orders, 10) # Show 25 contacts per page
        page = request.GET.get('page')
        orders = paginator.get_page(page)
        context['orders'] = orders
        return render(request, 'main/results.html',context)
    except Exception as e:
        print('error is ', e)
        return HttpResponse(str(e))

【问题讨论】:

  • 您能否展示您正在发出的示例请求,即您访问时遇到此问题的完整 URL?

标签: python django pagination


【解决方案1】:

request.GET.get('q') 中,如果 q 没有在 get 调用中作为参数传递,它将返回 None。

如果 q 未通过,将其更改为 request.GET['q'] 将引发异常

【讨论】:

  • 感谢您的回复 Mathews,我已将其更改为 request.GET['q'] 但它在 /result/ 'q' 处引发和 MultiValueDictKeyError
【解决方案2】:

这是一个如何使用分页器模块的示例,用于空页面等。

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


def post_list(request): #list items
    queryset_list = Post.objects.all() #.order_by("-timestamp")

    query = request.GET.get("q")
    if query:
        queryset_list = queryset_list.filter(
            Q(title__icontains=query) |
            Q(content__icontains=query)


            ).distinct()

    paginator = Paginator(queryset_list, 10) # Show 25 contacts per page
    page_request_var = "page"
    page = request.GET.get(page_request_var)
    try:
        queryset = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        queryset = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        queryset = paginator.page(paginator.num_pages)
    context = {
        "object_list": queryset,
        "title": "Building stuff with code",
        "page_request_var" : page_request_var
    }
    return render(request, "post_list.html", context)

【讨论】:

    【解决方案3】:

    按以下方式试试

    def result(request):
        try:
            q = request.GET.get('q')
            orders = Order.objects.filter(Q(flat_number=int(q)) | 
             Q(customer_contact=int(q)))
            paginator = Paginator(orders, 10) # Show 25 contacts per page
            page = request.GET.get('page')
            try:
                pots = paginator.page(page)
            except PageNotAnInteger:
                posts = paginador.page(1)
            except EmptyPage:
                posts = paginador.page(1)
            context['orders'] = post
            return render(request, 'main/results.html',context)
    
    
        except Exception as e:
            print('error is ', e)
            return HttpResponse(str(e))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 2020-10-19
      • 2017-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多