【问题标题】:Django global name 'PageNotAnInteger' is not defined未定义 Django 全局名称“PageNotAnInteger”
【发布时间】:2013-11-25 01:14:53
【问题描述】:

我有一个奇怪的问题。我有一个视图,它通过 Django REST Framework 的序列化程序和分页器返回一些 JSON。

我的视图如下所示(返回国家模型中的所有对象):

@api_view(['GET'])
def country_list(request):
    """
    List all countries
    """
    if request.method == 'GET':

        geoname_ids = request.QUERY_PARAMS.get('geoname_ids')
        queryset = Countries.objects.all()
        paginator = Paginator(queryset, request.QUERY_PARAMS.get('limit'))
        page = request.QUERY_PARAMS.get('page')

        try:
            countries = paginator.page(page)
        except PageNotAnInteger:
            #If page is not an integer, deliver first page.
            countries = paginator.page(1)
        except EmptyPage:
            #If page is out of range
            #Delivery last page of results
            countries = paginator.page(paginator.num_pages)

        serializer_context = {'request': request}
        serializer = PaginatedCountrySerializer(countries, context=serializer_context)
        return Response(serializer.data)

这很好用。

但是我需要返回一个具有特定 ID 的国家/地区,我正在尝试这个:

@api_view(['GET'])
def country_list(request):
    """
    List all countries
    """
    if request.method == 'GET':

        geoname_ids = request.QUERY_PARAMS.get('geoname_ids')
        queryset = Countries.objects.filter(country_geoname_id=geoname_ids)
        paginator = Paginator(queryset, request.QUERY_PARAMS.get('limit'))
        page = request.QUERY_PARAMS.get('page')

        try:
            countries = paginator.page(page)
        except PageNotAnInteger:
            #If page is not an integer, deliver first page.
            countries = paginator.page(1)
        except EmptyPage:
            #If page is out of range
            #Delivery last page of results
            countries = paginator.page(paginator.num_pages)

        serializer_context = {'request': request}
        serializer = PaginatedCountrySerializer(countries, context=serializer_context)
        return Response(serializer.data)

我显然用 geonames_ids 参数调用 URL。它给出了一个错误:global name 'PageNotAnInteger' is not defined 指的是异常。

我的代码有问题吗?在更改查询集之前为什么 PageNotAnInteger 会起作用是没有意义的。

【问题讨论】:

    标签: python django django-views django-rest-framework


    【解决方案1】:

    你应该先导入它:

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

    【讨论】:

      【解决方案2】:

      如果不导入 PageNotAnInteger,您将无法使用它。 所以请先导入。

      from django.core.paginator import PageNotAnInteger
      

      如果你也需要 EmptyPage:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-28
        • 2013-06-07
        • 1970-01-01
        • 1970-01-01
        • 2017-07-03
        • 1970-01-01
        • 2018-05-04
        • 2015-12-22
        相关资源
        最近更新 更多