所以,我按照以下日期过滤。但是,如何让用户通过网址控制日期范围。所以,例如:
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))
然后将开始和结束日期变量传递给渲染函数
答案 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插件自定义开始和结束字段。