所以,我在下面按日期过滤。但是,如何让用户通过网址控制日期范围。因此,举例来说:使用Django视图和模板通过url参数控制过滤日期范围?
http://fakeurl.net/?start=10-1-15&end=10-5-15
,用户可以更改参数的URL之间有什么日期范围内的对象将显示在网站上决定。这是我的观点:
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 %>
我需要日期范围做花药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))
然后就是通过开始和结束日期变量来渲染功能
我不确定从request.GET获取原始数据是否安全。如果用户在日期值中出错,该怎么办?像?end_date = 2015-05-112。我仍然建议移动捕获GET属性的代码,验证它们,将其转换为适当的python类型并将默认值设置为表单代码。 – Nick