【问题标题】:How to do ajax pagination with QueryString Parameters in Django?如何在 Django 中使用 QueryString 参数进行 ajax 分页?
【发布时间】:2022-01-22 09:27:59
【问题描述】:

我想使用多个 QueryString 参数创建分页,我只使用 Django 创建了常规分页,但是在使用多个 QueryString 创建 Ajax 分页时遇到了问题。

我收到了这个错误: int() 参数必须是字符串、类似字节的对象或数字,而不是 'NoneType'

我的看法:

def products(request):
    products = Products.objects.all()
    if   request.method == 'GET':
                per_page = request.GET.get("option")
                
                
                paginator = Paginator(products, per_page)  # data from get request is not passed properly
                page = request.GET.get('page')
                try:
                    product_list = paginator.page(page)
                except PageNotAnInteger:
                   
                     product_list = paginator.page(1)
                except EmptyPage:
               
                     product_list = paginator.page(paginator.num_pages)
    return render(request, './item/shop.html', {'products': products})

我的Query参数提交html:

<select name="show-product-count" class="form-control" id= "show-product-count">
                                            <option value="9">Show 9</option>
                                            <option value="12" selected="selected">Show 12</option>
                                            <option value="24">Show 24</option>
                                            <option value="36">Show 36</option>
                                        </select>

我的 Ajax/Jquery:

$(document).ready(function () {
 $("#show-product-count").on("change", function(){
    var selectedValue = $(this).val();
  
    $.ajax({
      url : $(this).data('url'),
      type : "GET",
      data : {"option" : selectedValue},
      dataType : "json",
      success : function(){
  
      }
    });
  });



})

【问题讨论】:

    标签: jquery django ajax django-views


    【解决方案1】:

    您正在使用正文中的数据执行获取请求(甚至不确定是否可能),但您的视图正在检查查询参数。

    更改您的 ajax 请求,使其将数据作为查询参数发送:

    $(document).ready(function () {
     $("#show-product-count").on("change", function(){
        var selectedValue = $(this).val();
     
        $.ajax({
          url : $(this).data('url')+'?option='+selectedValue,
          type : "GET",
          success : function(){
      
          }
        });
      });
    })
    

    【讨论】:

    • 我仍然遇到同样的错误:int() 参数必须是字符串、类似字节的对象或数字,而不是 'NoneType' 我只想通过 GET 请求将值传递给 per_page 变量。你知道我怎样才能做到这一点吗?
    • 如果per_page为None,表示请求中没有传入。你可以使用默认值per_page = request.GET.get("option", 1)
    • 我在控制台上收到此错误:127.0.0.1:8000/products/undefined?option=9 响应是:找不到页面 (404) 请求方法:GET 请求 URL:127.0.0.1:8000/products/undefined?option=9 我想我需要在 /products/ 之后传递分页器 url我怎样才能用 Ajax 做到这一点?
    • $(this).data('url') 错误.. 正确设置
    猜你喜欢
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 2019-11-04
    • 2015-04-07
    • 1970-01-01
    相关资源
    最近更新 更多