【问题标题】:How to combine bootstrap paginator and select to filter a table?如何结合引导分页器和选择过滤表?
【发布时间】:2019-11-08 20:41:55
【问题描述】:

我目前在桌子上使用分页器。我想添加一个选择来过滤表格,但我无法管理如何在不丢失选择的情况下浏览页面。

目前(参见下面的代码)当我通过单击上一个或下一个进行导航时,使用的选项会丢失,并且会显示所有数据。

我必须更改“其他”条件以考虑所选选项。我正在考虑使用全局变量来存储在变量中选择的选项,但它可能会产生副作用,因此不推荐......

views.py

@login_required
def index(request):

    # data sent (click on 'search' button or option selected)
    if request.POST:
        # data from select
        selection = request.POST.get('selection', False)
        # data from search
        ide = request.POST.get('ide', False)

        # search
        if ide == "":
            paginator = Paginator(Preinclusion.objects.all(), 5)
            preincluded = paginator.page(1)
        else:
            paginator = Paginator(Preinclusion.objects.filter(pat_num__startswith = ide),5)
            preincluded = paginator.page(1)

        # select
        if selection == 'Randomized':
            print('Randomized')
            paginator = Paginator([patient for patient in Preinclusion.objects.all() if patient.is_randomized], 5)
            preincluded = paginator.page(1)

        elif selection == 'Not randomized':
            print('Not randomized')
            paginator = Paginator([patient for patient in Preinclusion.objects.all() if not patient.is_randomized], 5)
            preincluded = paginator.page(1)

        elif selection == 'All patients':
            print('All patients')
            paginator = Paginator(Preinclusion.objects.all(), 5)
            preincluded = paginator.page(1)

        if not preincluded:
            liste_existe = False # non utilisé dans le template

    else:

        # first index visited
        paginator = Paginator(Preinclusion.objects.all(), 5)
        page = request.GET.get('page')

        try:
            preincluded = paginator.page(page)
        except PageNotAnInteger:
            preincluded = paginator.page(1)
        except EmptyPage:
            preincluded = paginator.page(paginator.num_pages)

    return render(request, 'randomization/index.html', {'preincluded': preincluded})    

我想store为上一个/下一个导航选择的选项。

【问题讨论】:

    标签: python django paginator


    【解决方案1】:

    你可以使用 Django session 来存储你想要的任何东西,例如:request.session['my_key'] = 'My Value'

    【讨论】:

      【解决方案2】:

      只需将您的“选择”属性传递给这样的渲染上下文

          return render(request, 'randomization/index.html', {'preincluded': preincluded, 'selection': selection})    
      

      然后,在模板({{ selection }})中处理这个上下文变量,并通过这个值设置选择的选项。一种可能的变体将是这样的:

      <select>
      <option value="Randomized" {% if selection == "Randomized" %}selected{% endif %}>1</option>
      </select>
      

      如你所说,避免在异步和无状态应用程序中使用全局变量

      【讨论】:

      • 感谢两位的回复!目前我迷路了,if/else 条件太多......这应该是最简单的,但我不擅长算法
      • 不要害怕在模板中使用条件,这是它们所构建的少数东西之一
      猜你喜欢
      • 1970-01-01
      • 2020-08-12
      • 2019-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-05
      • 2022-05-26
      • 1970-01-01
      相关资源
      最近更新 更多