简体   繁体   English

Django:视图调用另一个模板(分页)

[英]Django : view calls an other template (Pagination )

I have this view: 我有这样的看法:

class DamageListCriteria(TemplateView):
template_name = "damage/damagelist_criteria.html"

def get(self, request):
    form = DamageListCriteriaForm()
    general = General.objects.get(pk=1)
    args = {
        'form': form,
        'general': general
    }
    return render(request, self.template_name, args)

def post(self, request):
    general = General.objects.get(pk=1)
    form = DamageListCriteriaForm(request.POST)
    form.non_field_errors()

    if form.is_valid():
        fromdate = request.POST.get('fromdate')
        fdate = datetime.strptime(fromdate, '%d/%m/%Y')
        fdate = datetime.combine(fdate, datetime.min.time(), tzinfo=pytz.UTC)
        print('fdate ', fdate)
        todate = form.cleaned_data['todate']
        #tdate = datetime.strptime(todate, '%d/%m/%Y') + timedelta(days=1)
        tdate = datetime.strptime(todate, '%d/%m/%Y')
        tdate = datetime.combine(tdate, datetime.max.time(), tzinfo=pytz.UTC)
        print('tdate ', tdate)

        d_list = Damage.objects.filter(entry_date__range=(fdate, tdate))
        paginator = Paginator(d_list, 1)

        page = request.GET.get('page')
        try:
            damage_list = paginator.page(page)
        except PageNotAnInteger:
            # If page is not an integer, deliver first page.
            damage_list = paginator.page(1)
        except EmptyPage:
            # If page is out of range (e.g. 9999), deliver last page of results.
            damage_list = paginator.page(paginator.num_pages)

        template = "damage/damagelist_table.html"
        form = DamageListForm()
        general = General.objects.get(pk=1)

        fromdatetext = fdate.strftime('%d/%m/%Y')
        todatetext = tdate.strftime('%d/%m/%Y')

        args = {
            'form': form,
            'damage_list': damage_list,
            'general': general,
            'fromdate': fromdatetext,
            'todate': todatetext
        }
        return render(request, template, args)


    else:
        print('form is not valid')
        print(form.errors)
        # form = DamageEntryForm()
        args = {'form': form,
                'general': general
                }
        return render(request, self.template_name, args)

I want to get some criteria to make a filtering listing of my database. 我想获取一些标准来对数据库进行过滤。 It worked this way , until the moment i tried to add pagination. 它以这种方式工作,直到我试图添加分页的那一刻。 The url is http://127.0.0.1:8000/damage/damage/list/criteria/ 网址为http://127.0.0.1:8000/damage/damage/list/criteria/

url(r'damage/list/criteria/$', views.DamageListCriteria.as_view(), name="damage-list-criteria"),

Next and Previous don't work because I am still at this url after the 下一个和上一个无效,因为我在

return render(request, template, args)

Can i redirect somehow? 我可以以某种方式重定向吗? I understand that this might be the wrong way to do the listing. 我了解这可能是错误的上市方式。 Can you help me , how to do it? 您能帮我,怎么做?

Thanks a lot 非常感谢

Kostas 科斯塔斯

The easiest thing to do would be not use Django itself but use Django REST framework and reuse its serializer classes along with APIView (or one of its subclasses). 最简单的方法不是使用Django本身,而是使用Django REST框架,并重用其序列化器类以及APIView(或其子类之一)。 Are you in a position to use it or are you constrained? 您是否有能力使用它或受到限制?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM