最佳实践:如何在Django模板中最好地实现评级星

时间:2009-10-30 12:49:21

标签: django django-templates

我希望有可重复使用的评级(典型的5星级布局)。 我发现这个http://www.thebroth.com/blog/119/css-rating-stars解释了如何使用css显示它。 为了实际收集评级我正在考虑使用图像映射或简单的单选按钮。 我想在各种不同的模型上使用它。

你会怎么做? 我可以创建一个小部件,还是可以使用模板执行此操作? 实际上我很惊讶没有在网上找到任何东西。它是那么简单,还是不常见?

2 个答案:

答案 0 :(得分:5)

如果在django-users mailing list上收到了一些有趣的答案:

迈克:

  

你可以创建一个小部件,我自己喜欢单独的评级模型。那   收集值,然后将其添加到总计并创建分数或   平均。该模型存储了总分数和总分数   得到我的平均值,(我在视图中做数学)。将其添加到其他模型   与外键关系。强制用户只投票一次很少   在当前会话或cookie生存期之外强制执行。如果你想要的话   坚持不懈,我不知道什么是最好的   这个,但只需要注册用户投票。   现在,您只需显示评级表单,我会将其作为模板包含   标记并将标记放入我的模板中。这个标签有基本的提交表格,   形成它的自我是两个领域,有一个选择框(我这样简单)和一个   隐藏字段标记为下一个指向此页面,我可以重定向   至。当用户提交时,在我的视图中处理表单操作,我只是   增加投票和总分并重定向回投票的页面   采取。这是使用传统的提交按钮,将表单发布到   网址,返回完整视图。   如果你用javascript做一些事情来照亮星星的数量   评级并点击要提交的星标,在这里您可能希望将其发布为   使用xhr请求的json对象,更新视图并返回一个json对象   更新的评级值,如果是200,则使用新值更新页面   投票后(以200返回)。如果它是500,处理错误,   让用户知道,投票和重置星星有问题。   如果有人有更好的想法,这就是我所做的,或者你会做的事情,   请大声说出来。   希望这可以帮助。   迈克

by Ethan:

  

我实际上只对我正在进行的项目进行了5星评级   一直试图弄清楚我是否有任何可重复使用的值得发布的   包(并试图找到时间来弄清楚..)我将概述   我做了什么以及我曾经做过什么。   我使用django-ratings [1,2]作为后端,并将其RatingField连接到   我的应付价格型号。   我喜欢jQuery,所以对于前端我使用了jquery-star-rating插件[3,4]   作为基础。它将一组单选按钮变成一个星形小部件。一世   没有密切关注实施,但我认为这基本上是   使用链接中描述的相同CSS技术。开始吧   只需要包含它的JS和CSS并将class =“star”添加到收音机中   表单中的按钮。   然后我写了一些从收音机发送请求数据的视图代码   django-ratings的按钮。超级简单的东西,只是使用了django评级   RatingManager API并处理它抛出的异常 - 我已粘贴了   [5]我的代码片段。 (我使用的是旧版本   django-ratings b / c我没有时间升级;它可能看起来有点   现在不一样了,我不确定。)   最后,我还想要两件事:   1)如果用户已经对项目进行了评级并查看“评价此项目”表格   再次,“星形小部件”应该预设用户以前的评级,   而不只是显示五个空白的星星。我意识到最简单的方法   这是来自客户端:模拟用户的onload事件   点击他已点击的星星。我的视图和模板代码   那是[6];我只是想出了jquery-star-rating的HTML格式   设置并期望,并点击用户的相应星号   现有评级。   2)查看项目时,用户的评分应显示为非交互式   明星,而不是数字。我写了一个愚蠢的指甲模板过滤器   旨在取一个数字(评级)并返回一堆星图。   我再次使用了HTML格式和CSS类   jQuery的星级评定。我的代码是[7]。   我认为把它中的一些放在一个django形式的字段中是很好的   渲染单选按钮并一次性触发jquery-star-rating,和   处理提交给django-ratings后端的提交。但我还没有   有机会想出来。   无论如何,希望这有帮助,   阮经天   1 http://github.com/dcramer/django-ratings   [2] http://pypi.python.org/pypi/django-ratings   [3] http://www.fyneworks.com/jquery/star-rating/   [4] http://code.google.com/p/jquery-star-rating-plugin/   [5] http://pastebin.ca/1650596   [6] http://pastebin.ca/1650609   [7] http://pastebin.ca/1650616

答案 1 :(得分:2)

PyPi上有一个django-ratings个应用。它可以给你评分为'myinstance.rating.get_percent()'的百分比,在你的模板中用于你提到的CSS技巧中的内部div宽度。