我对Django很陌生,我正在一个网站上工作,我希望用户能够根据对象过滤掉对象'时间戳。我可以轻松地在views.py中进行过滤并重新加载模板,但是我应该如何过滤客户端呢?
加载所有内容是否是个好主意:
{% 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集成?
答案 0 :(得分: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部分