2009-10-30 100 views
11

我想要有可重用的評級(5星的典型佈局)。 我找到了這個http://www.thebroth.com/blog/119/css-rating-stars,它解釋瞭如何使用css顯示。 對於實際收集評級,我想使用圖像映射或簡單的單選按鈕。 我想用於各種不同的型號。最佳實踐:如何在Django模板中最好地實現Rating-Stars

你會如何做到這一點? 我應該創建一個小部件還是可以使用模板做到這一點? 其實我很驚訝沒有在網上找到任何東西。這是簡單的還是不常見的?

回答

5

如果收到關於django-users mailing list一些有趣的答案:

邁克:

那麼你可以創建一個小部件,我喜歡自己一個單獨的評級模型。 收集該值,然後將其添加到總數中,並創建一個分數或平均值。模型存儲總票數和總分數,我將 分開並得到我的平均數(我在視圖中進行數學計算)。將其添加到具有外鍵關係的其他型號 。在當前會話或cookie生存期之外強制執行該用戶僅投票一次很少執行 。如果你想要 堅持,我不是fgv6gw33TT確定我的頭頂是 這是最好的,但只需要註冊用戶投票。 現在,您只需顯示評分表,我會將其作爲模板包含 標記並將標記放置在我的模板中。這個標籤有一個基本的提交表單,它的自我形式是兩個字段,帶有一個選擇框(我簡單地用這種方式)和一個 隱藏字段,下一個回到這個頁面,我可以將 重定向到。當用戶提交時,在我的意見中處理表單操作,我只需 遞增投票和總分,並重新導向回到投票是 的頁面。這是使用傳統的提交按鈕,將表單發佈到 url,返回完整視圖。 如果你使用javascript來點亮星星數量 評級並點擊要提交的星星,在這裏你可能想要使用xhr request將它發佈爲 json對象,更新視圖並返回一個包含 的json對象如果更新的評分值爲200,則在投票後用新值 更新頁面(與200一起返回)。如果這是一個500,處理錯誤,讓用戶知道, 有投票和重置星星的問題。 這是我做的,或者會在你的位置做的,如果任何人有更好的主意, 請說出來。 希望這有助於。 邁克

由阮經天:

其實我只是做了一個項目,5星評級我的工作,並有 一直試圖弄清楚,如果我有什麼可重複使用的價值作爲釋放一個 包(並試圖找出時間來弄清楚.. ..)我會概述 我做了什麼以及我曾經做過什麼。 我在後臺使用了django-ratings [1,2],並將其RatingField連接到 我的應用模型。 我喜歡jQuery,所以對於前端,我使用jquery-star-rating插件[3,4] 作爲基礎。它將一系列單選按鈕變成了一個明星小部件。 I 沒有仔細研究實現,但我認爲它基本上是 使用鏈接中描述的相同的CSS技術。要開始你 只需要包括其JS和CSS,並添加class =「star」到您的表單中的無線電 按鈕。 然後,我寫了一些查看代碼,將無線電 按鈕的請求數據發送到django評級。超級簡單的東西,只是使用了評級管理器API,並處理了它拋出的異常 - 我已經在我的代碼中粘貼了 片段[5]。 (我使用的是舊版本的 django-ratings b/c我沒有時間升級;現在看起來有點不同 ,我不確定。) 最後,我還想要兩個事情: 1)如果用戶已經評級的項目並查看「評價此項目」再次形成 ,「明星小部件」應與用戶的先前費率, 而不是隻顯示5空白星預置。我意識到做 這個最簡單的方法來自客戶端:一個onload事件,它模擬用戶點擊他已經點擊的明星的 。我的視圖和模板代碼爲 ,位於[6];我只是想出了jquery-star-rating- 設置和期望的HTML格式,並單擊了用戶現有評級的相應明星。 2)查看該項目時,用戶的評分應顯示爲非交互式星號,而不是數字。我寫了一個dumb-as-nails模板過濾器 ,設計用來取一個數字(評級)並返回一堆明星圖像。 同樣,我只使用了 jquery-star-rating的HTML格式和CSS類。我的代碼是[7]。 我一直在考慮把它放在一個django-form字段中,它可以一次性呈現單選按鈕並觸發jquery-star-rating,並且 可以處理提交給django-ratings的後端。但我還沒有一個機會來解決這個問題。 無論如何,希望這有助於 探 1http://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

所有被引用的pastebin網址已損壞 – glarrain 2013-05-31 22:37:32

2

PyPi上有一個django-ratings應用程序。它可以給你評分爲'myinstance.rating.get_percent()'在你的模板中用於你提到的CSS技巧中的內部div寬度。