使用Django视图和&amp ;;通过url参数控制过滤器日期范围。模板?

时间:2015-11-19 18:56:34

标签: python django django-templates django-views

所以,我按照以下日期过滤。但是,如何让用户通过网址控制日期范围。所以,例如:

 http://fakeurl.net/?start=10-1-15&end=10-5-15

用户可以更改网址中的参数,以指定对象在网站上显示的日期范围。以下是我的观点:

class FakeView(View):
    def get(self, request, *args, **kwargs):
    template = "fake.html"

    stuff = ObjectName.objects.all().order_by('approved')
    number_of_stuff = request.GET.get('number_of_stuff, default="10")

    start = datetime.date(2010, 1, 1)
    end = datetime.date(2020, 1, 1)
    stuff = ObjectName.objects.filter(created__range=(start, end))

    return render(request, template, {'stuff': stuff, 'number_of_stuff': number_of_stuff})

以下是我的模板中的内容:

    {% for stuff in stuff|dictsortreversed:"created"|slice:number_of_stuff %}
               {{ stuff.whatever }}
    <% endfor %>

我是否需要为日期范围执行anther request.GET.get()?如何在开始和结束之间分手?它将如何集成到模板中?

想出来: 所以,这没什么特别的,但为了我的目的,工作正常:

    end_date = request.GET.get('end_date', default="2100-1-1")
    start_date = request.GET.get('start_date', default="1850-1-1")

    stuff = Stuff.objects.filter(approved__range=(start_date, end_date))

然后将开始和结束日期变量传递给渲染函数

1 个答案:

答案 0 :(得分:0)

您应该使用Django表单捕获并验证日期过滤的“开始”和“完成”。

所以只需添加一个简单的表单:

from django import forms

class DateFilterForm(forms.Form):
    start = forms.DateField()
    finish = forms.DateField()

然后在您的视图中,只需将您的GET属性传递给此表单:

...
form = DateFilterForm(request.GET)
if not form.is_valid():
    # here goes either some error handling or setting default filter values
else:
    start = form.cleaned_data['start']
    finish = form.cleaned_data['finish']
...

在模板中,您可以使用相同的表单,并使用一些jquery datepicker插件自定义开始和结束字段。