Лучшие практики: Как лучше всего реализовать Звезды Оценки в [закрытом] Django Templates

TreeMap кажется легкой задачей мне - просто из-за "в алфавитном порядке" требование. HashMap не имеет никакого упорядочивания, когда Вы выполняете итерации через него; TreeMap выполняет итерации в естественном ключевом порядке.

РЕДАКТИРОВАНИЕ: Я думаю, что комментарий Konrad, возможно, предлагал, "используют HashMap, затем вид". Это хорошо, потому что, хотя у нас будут повторения N первоначально, у нас будет K < = N ключи к концу из-за дубликатов. Мы могли бы также сохранить дорогой бит (сортирующий) до конца, когда у нас есть меньше ключей, чем получают small-but-non-constant удар хранения, это отсортировало, когда мы идем.

Однако я придерживаюсь своего ответа в настоящий момент: потому что это самым простым способ достигнуть цели. Мы действительно не знаем, что OP особенно волнуется по поводу производительности, но вопрос подразумевает, что он обеспокоен элегантностью и краткостью. Используя TreeMap делает это невероятно резюме, которое обращается ко мне. Я подозреваю, что, если производительность является действительно проблемой, может быть лучший способ напасть на нее или, чем TreeMap или, чем HashMap:)

12
задан daefu 30 October 2009 в 12:49
поделиться

2 ответа

Если вы получили несколько интересных ответов в списке рассылки django-users :

Майк:

Хорошо вы можете создать виджет, мне нравится отдельная рейтинговая модель. Который собирает значение, а затем добавляет его к общей сумме и создает оценку или средний. Модель хранит общее количество голосов и общий балл, который я делю и получите свой средний результат (я занимаюсь математикой в ​​представлении). Добавление к другим моделям с отношением внешнего ключа. Требовать, чтобы пользователи голосовали только один раз, редко принудительно вне текущего сеанса или времени жизни cookie. Если вы хотите настойчивость, я не уверен в том, что лучше всего подходит для это, но для этого потребуется голосование только зарегистрированных пользователей. Теперь вы просто показываете форму оценки, я бы сделал это как включение шаблона тег и поместите тег в мои шаблоны. Этот тег имеет базовую форму отправки, форма, это два поля, с полем выбора (я пошел простым способом) и скрытое поле, помеченное рядом, которое указывает на эту страницу, которую я могу перенаправить к. Когда пользователь отправляет сообщение, в моих представлениях для обработки действия формы я просто увеличить количество голосов и общий балл и перенаправить обратно на страницу, на которой был проведен голос взят на себя. Это использует традиционную кнопку отправки, отправляя форму в url, возвращающий полный просмотр. Если вы сделаете что-то с javascript, которое подсвечивает количество звездочек для рейтинг и нажмите на звезды, чтобы отправить, здесь вы можете опубликовать его как json, используя запрос xhr, обновите представление и верните объект json с обновленные значения рейтинга, если это 200, обновите страницу новыми значениями после голосования (вернулся с 200). Если это 500, исправьте ошибку, сообщив пользователю, что произошла проблема с голосованием и сбросом звездочек. Это то, что я делаю или сделал бы на вашем месте, если у кого-то есть идея получше, пожалуйста, говорите. Надеюсь это поможет. Майк

Итана:

На самом деле я только что поставил 5-звездочную оценку проекту, над которым работаю, и пытался выяснить, есть ли у меня что-нибудь многоразовое, достойное выпуска в качестве пакет (и пытаясь найти время, чтобы разобраться в этом ..) Я обрисую что я делал и что делал раньше. Я использовал django-rating [1,2] для серверной части и подключил его RatingField к мои оцениваемые модели. Мне нравится jQuery, поэтому для интерфейса я использовал плагин jquery-star-rating [3,4] в качестве основы. Он превращает набор переключателей в звездный виджет. я не смотрел внимательно на реализацию, но я думаю, что в основном используя тот же метод CSS, который описан в вашей ссылке. Для начала вам просто нужно включить его JS и CSS и добавить class = "star" в радио кнопки в вашей форме. Затем я просто написал код представления, который отправляет данные запроса по радио. кнопки к django-рейтингам. Супер простой материал, просто использовал рейтинги django RatingManager API и обработал генерируемые им исключения - я вставил фрагмент моего кода в [5]. (Я использую несколько старую версию django-rating b / c У меня не было времени на обновление; это может выглядеть немного теперь другое, я не уверен.) Наконец, мне хотелось еще двух вещей: 1) Если пользователь уже оценил элемент и просматривает форму "Оценить этот элемент" опять же, "звездочка" должна быть предварительно установлена ​​с предыдущим рейтингом пользователя, вместо того, чтобы просто показывать пять пустых звездочек. Я понял самый простой способ сделать это было со стороны клиента: событие onload, которое имитирует пользователя нажав на звезду, на которую он уже нажал. Мое представление и код шаблона для то есть в [6]; Я только что выяснил форматы HTML, которые jquery-star-rating устанавливает и ожидает, и щелкнул соответствующую звездочку для пользователя существующий рейтинг. 2) При просмотре элемента оценки пользователей должны отображаться как неинтерактивные. звезды, а не числа. Я написал шаблонный фильтр "тупой как гвоздь" предназначен для получения числа (рейтинга) и возврата кучи звездных изображений. Опять же, я просто использовал классы форматирования HTML и CSS из jquery-star-рейтинг. Мой код для этого находится в [7]. Я подумал, что было бы неплохо поместить часть этого в поле django-формы, которое отображает переключатели и запускает jquery-star-rating за один раз, и обрабатывает отправку в серверную часть django-rating. Но у меня не было шанс выяснить это еще. В любом случае, надеюсь, это поможет, Итан 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

5
ответ дан 2 December 2019 в 23:07
поделиться

На PyPi есть приложение django-rating . Он может дать вам рейтинг в процентах myinstance.rating.get_percent (), который будет использоваться в вашем шаблоне для внутренней ширины div в упомянутом вами трюке CSS.

2
ответ дан 2 December 2019 в 23:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: