2009-10-30 38 views
11

Tôi muốn có xếp hạng có thể sử dụng lại (bố cục điển hình với 5 sao). Tôi đã tìm thấy điều này http://www.thebroth.com/blog/119/css-rating-stars giải thích cách hiển thị điều này bằng cách sử dụng css. Để thực sự thu thập xếp hạng, tôi đã nghĩ đến việc sử dụng bản đồ hình ảnh hoặc có thể là các nút radio đơn giản. Tôi muốn sử dụng điều này trên các mô hình khác nhau.Thực tiễn tốt nhất: Cách thực hiện tốt nhất Xếp hạng sao trong Mẫu Django

Bạn sẽ làm như thế nào? Tôi có nên tạo tiện ích con hoặc tôi có thể làm điều này với mẫu không? Thực ra tôi đã rất ngạc nhiên khi không tìm thấy bất kỳ thứ gì trên trang web này. Nó đơn giản hay không phổ biến?

Trả lời

5

Nếu nhận được những câu trả lời thú vị về django-users mailing list:

bằng Mike:

Vâng có thể tạo một widget, tôi thích một mô hình giá riêng bản thân mình. Điều đó thu thập giá trị và sau đó thêm giá trị đó vào tổng số và tạo điểm số hoặc trung bình là . Mô hình lưu trữ tổng số phiếu bầu và tổng số điểm, mà tôi chia cho số và nhận điểm trung bình của tôi, (tôi thực hiện phép toán theo quan điểm). Thêm nó vào các mô hình khác với mối quan hệ khóa ngoại. Việc ép buộc người dùng đó chỉ bỏ phiếu một lần hiếm khi được thực thi bên ngoài phiên hiện tại hoặc thời lượng cookie. Nếu bạn muốn nó kiên trì, tôi không phải là ffv6gw33TT chắc chắn ra khỏi đỉnh đầu của tôi những gì là tốt nhất cho này, nhưng sẽ chỉ yêu cầu người dùng đã đăng ký bỏ phiếu. Bây giờ, bạn chỉ cần hiển thị biểu mẫu xếp hạng, tôi sẽ làm điều đó như một mẫu bao gồm và đặt thẻ vào các mẫu của tôi. Thẻ này có biểu mẫu gửi cơ bản, biểu mẫu đó là bản thân hai trường, với một hộp chọn (tôi đã đi theo cách này) và một trường bị ẩn có gắn nhãn tiếp theo trỏ trở lại trang này, để tôi có thể chuyển hướng tới. Khi người dùng gửi, trong quan điểm của tôi để xử lý hành động biểu mẫu, tôi chỉ cần tăng số phiếu và tổng số điểm và chuyển hướng trở lại trang phiếu bầu là được thực hiện. Điều này đang sử dụng nút gửi truyền thống, đăng biểu mẫu lên một địa chỉ , trả về chế độ xem đầy đủ. Nếu bạn làm điều gì đó với javascript chiếu sáng số lượng ngôi sao cho số xếp hạng và nhấp vào các ngôi sao để gửi, tại đây bạn có thể muốn đăng nó là đối tượng json bằng cách sử dụng yêu cầu xhr, cập nhật chế độ xem và trả về đối tượng json với giá trị xếp hạng được cập nhật, nếu là 200, hãy cập nhật trang với các giá trị mới sau khi bỏ phiếu (trả về bằng 200). Nếu đó là 500, xử lý lỗi, để người dùng biết, đã xảy ra sự cố khi bỏ phiếu và đặt lại dấu sao. Đây là những gì tôi làm, hoặc sẽ làm ở vị trí của bạn, nếu có ai có ý tưởng tốt hơn, vui lòng lên tiếng. Hy vọng điều này sẽ hữu ích. Mike

bởi Ethan:

Tôi thực sự chỉ làm xếp hạng 5 sao cho một dự án tôi đang làm việc trên, và có đã cố gắng để tìm ra nếu tôi có bất cứ điều gì có thể dùng lại giá trị phát hành là một gói (và cố gắng tìm thời gian để tìm ra điều đó ..) Tôi sẽ phác thảo những gì tôi đã làm và những gì tôi đã từng làm. Tôi đã sử dụng xếp hạng django [1,2] cho chương trình phụ trợ và kết nối RatingField của mình với các mô hình có thể chấp nhận của tôi. Tôi thích jQuery, vì vậy đối với giao diện người dùng, tôi đã sử dụng plugin xếp hạng sao jquery [3,4] làm cơ sở. Nó biến một bộ sưu tập các nút radio thành một widget sao. Tôi chưa xem xét kỹ cách triển khai nhưng tôi nghĩ về cơ bản là sử dụng cùng một kỹ thuật CSS được mô tả trong liên kết của bạn. Để bắt đầu, bạn chỉ cần bao gồm JS và CSS của nó và thêm class = "star" vào các nút radio trong biểu mẫu của bạn. Sau đó tôi chỉ viết một số mã xem để gửi dữ liệu yêu cầu từ các nút radio tới xếp hạng django. Công cụ siêu đơn giản, chỉ sử dụng xếp hạng django xếp hạng API RatingManager và xử lý các ngoại lệ mà nó ném - Tôi đã dán đoạn mã từ mã của tôi tại [5]. (Tôi đang sử dụng phiên bản cũ của xếp hạng django b/c Tôi chưa có thời gian để nâng cấp; nó có thể trông hơi khác một chút bây giờ, tôi không chắc chắn.) Cuối cùng, tôi muốn thêm hai : 1) Nếu người dùng đã xếp hạng một mục và xem lại biểu mẫu "xếp hạng mục này" , "tiện ích con sao" phải được đặt trước với xếp hạng trước đó của người dùng, thay vì chỉ hiển thị năm sao trống. Tôi nhận ra cách dễ nhất để làm điều này là từ phía khách hàng: sự kiện onload mô phỏng người dùng nhấp vào ngôi sao mà anh đã nhấp vào. Chế độ xem và mã mẫu của tôi cho có nghĩa là [6]; Tôi chỉ tìm ra các định dạng HTML mà xếp hạng jquery sao xếp hạng đặt và mong đợi và nhấp vào ngôi sao thích hợp cho xếp hạng hiện tại của người dùng . 2) Khi xem mục, xếp hạng của người dùng sẽ hiển thị là không tương tác sao, thay vì là số. Tôi đã viết một bộ lọc mẫu câm-như-móng tay được thiết kế để có một số (đánh giá) và trả về một loạt các hình ảnh ngôi sao. Một lần nữa, tôi chỉ sử dụng các lớp định dạng HTML và CSS từ xếp hạng sao. Mã của tôi cho điều này là tại [7]. Tôi đã nghĩ rằng nó sẽ gọn gàng để đặt một số điều này trong một lĩnh vực hình thức django rằng làm cho các nút radio và kích hoạt jquery-star-rating tất cả trong một đi, và xử lý các trình phụ trợ django xếp hạng. Nhưng tôi chưa có cơ hội để tìm ra điều đó. Dù sao, hy vọng điều này sẽ giúp, Ethan 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

Tất cả các tham chiếu URL pastebin bị hỏng – glarrain

2

Có ứng dụng django-ratings trên PyPi. Nó có thể cung cấp cho bạn xếp hạng dưới dạng phần trăm 'myinstance.rating.get_percent()' để sử dụng trong mẫu của bạn cho chiều rộng div bên trong trong mẹo CSS mà bạn đã đề cập.

Các vấn đề liên quan