Лучшие практики: как лучше всего реализовать рейтинг-звезды в шаблонах Django [закрыто]
Я хотел бы иметь многоразовые рейтинги (типичный макет с 5 звездами). Я нашел это http://www.thebroth.com/blog/119/css-rating-stars это объясняет, как отобразить это с помощью css. Для фактического сбора рейтинга я думал об использовании карты изображений или, возможно, простых переключателей. Я хотел бы использовать это на различных моделях.
Как бы вы это сделали? Должен ли я Создать виджет или я могу сделать это с помощью шаблона? На самом деле я была хорошенькой. удивлен, что не нашел ничего об этом в интернете. Это так просто или необычно?
2 ответов
Если получил некоторые интересные ответы на django-список рассылки пользователей:
Майк:
Ну, вы можете создать виджет, мне нравится отдельная рейтинговая модель. Что собирает значение, а затем добавляет его к сумме и создает оценку или средний. Модель хранит общее количество голосов и общий балл, который я делю и получить мой средний, (я делаю математику в представлении). Добавление к другим моделям с отношением внешнего ключа. Обеспечение того, чтобы пользователи голосовали только один раз, редко применяется вне текущего сеанса или времени существования файла cookie. Если хочешь. упорство, я notfgv6gw33TT уверен с верхней части моей головы, что лучше для это, но потребует только зарегистрированных пользователей голосовать. Теперь вы просто отобразите форму рейтинга, я бы сделал это как включение шаблона тег и поместите тег в Мои шаблоны. Этот тег имеет основную форму отправки, форма это само - это два поля, с полем выбора (я пошел просто таким образом) и ля скрытое поле с надписью next, которое указывает на эту страницу, которую я могу перенаправить к. Когда пользователь отправляет, в моих представлениях для обработки действия forms, я просто увеличить голоса и общий балл и перенаправить обратно на страницу голосования принято. Это использование традиционной кнопки отправки, разноска формы в a url, возвращающий полный вид. Если вы делаете что-то с JavaScript, который освещает количество звезд рейтинг и нажмите на звезды, чтобы представить, здесь вы, возможно, захотите запостю объект json с помощью запроса xhr обновите представление и верните объект json с помощью обновленные значения рейтинга, если это 200, обновляют страницу новыми значениями после голосования (возвращается с 200). Если это 500, разберитесь с ошибкой, давая пользователю знать,была проблема голосования и сброса звезд. Это то, что я делаю, или сделал бы на вашем месте, если у кого есть идея получше, пожалуйста, говорите громче. Надеюсь, это поможет. Майк!--3-->
by Итан:
Я на самом деле только что сделал 5-звездочные рейтинги для проекта, над которым я работаю, и пытаюсь выяснить, если я ничего многоразовый стоит выпускать как пакет (и пытается найти время, чтобы понять это..) Я обрисую что я делал и что делал раньше. Я использовал django-ratings[1,2] для бэкэнда и подключил его RatingField к мои модели ратеабле. Мне нравится jQuery, поэтому для интерфейса я использовал плагин jQuery-star-rating[3,4] в качестве базы. Он превращает коллекцию переключателей в виджет "звезда". Я не смотрел внимательно на реализацию, но я думаю, что это в основном используя ту же технику CSS, описанную в вашей ссылке. Начать с тебя просто нужно включить его JS и CSS и добавить class= "star" в радио кнопки в форме. Затем я просто написал код просмотра, который отправляет данные запроса с радио кнопки на django-рейтинги. Супер простой материал, просто использовал django-рейтинги API RatingManager и обработал исключения он бросает ... я вставил фрагмент из моего кода в [5]. (Я использую несколько старую версию django-рейтинги b / c у меня не было времени на обновление; это может выглядеть немного теперь все по-другому, я не уверен.) Наконец, мне захотелось еще двух вещей.: 1) если пользователь уже оценил товар и просматривает форму "оценить этот товар" опять же, "звездный виджет" должен быть предустановлен с предыдущим рейтингом пользователя, вместо того, чтобы просто показывать пять пустых звезд. Я понял, что самый простой способ сделать этот был со стороны клиента: событие onload, имитирующее пользователя щелкнул по звезде, на которую уже нажал. Мой вид и код шаблона это в [6]; я только что выяснил форматы HTML, которые jQuery-star-rating устанавливает и ожидает, и нажал на соответствующую звезду для пользователя существующий рейтинг. 2) при просмотре элемента рейтинги пользователей должны отображаться как неинтерактивные звезды, а не числа. Я написал шаблон фильтра тупой как гвоздь конструировал принять номер (the рейтинг) и вернуть кучу звездных изображений. Опять же, я просто использовал форматирование HTML и классы CSS из jquery-star-рейтинг. Мой код для этого в [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
есть django-рейтинги приложение на PyPi. Это может дать вам рейтинг в процентах " myinstance.рейтинг.get_percent () ' использовать в вашем шаблоне для внутренней ширины div в трюке CSS, который вы упомянули.