2014-07-26 95 views
0

我对Django来说很新,我正在一个站点上工作,我希望用户能够根据对象的时间戳过滤出对象。我可以轻松地在views.py中进行过滤并重新加载模板,但我应该如何过滤客户端?Django客户端过滤

难道是一个好主意,只是加载了一切:

{% for obj in all_objects %} 
    <p>{{obj.time}}</p> 
{% endfor %} 

,然后使用JavaScript来隐藏和显示相关的对象?我不希望超过1,000个对象。

我看过这个: http://dustindavis.me/dynamic-filtered-drop-down-choice-fields-with-django.html 和作者说他会使用AngularJS而不是定制的AJAX解决方案。

Angular是我最好的选择还是其他框架更容易与Django集成?

回答

1

您不需要像Angular这样的整个框架来过滤结果,但我肯定会推荐使用其中一种流行的MVC框架。 然而,如果你走这条路线,你将会大大地改变你的django应用程序的体系结构,因为Angular等实际上是为单页面应用程序构建的,并且如果你的django项目暴露了API而不是呈现HTML,那么它将最适合你。尽管如此,为了解决您的问题,我会继续使用相同的django模板,并将列表的内容加载到隐藏的HTML元素中。 然后在您的页面的Javascript代码中,您可以根据用户选择从列表中提取相关项目。不过,该代码完全是Javascript。

作为提示,我将使用django模板插入过滤参数作为隐藏HTML标记的数据属性。举个例子:

{% for obj in all_objects %} 
    <p data-time='{{obj.time}}' data-somefilter='{{obj.somefiter}}'>{{obj.time}}</p> 
{% endfor %} 

这样你就可以很容易地使用jQuery选择过滤基于需求的数据,然后拷贝过来的结果,可见HTML部分,在那里你显示过滤列表