django + тегирование с помощью jquery
Вопрос
Я хочу использовать jQuery и создать интерфейс тегов для пользователей.Подобно тому, как пользователи в StackOverflow могут добавлять теги для типа вопроса, который они задают.Я заставляю его работать, используя jQuery и tagit:
http://jquery.webspirited.com/2011/02/jquery-tagit-a-jquery-tagged-plugin/
Новое место библиотеки:
https://github.com/hailwood/jQuery-Tagit
Проблема в том, что, скажем, у пользователя есть ошибка в другой части формы, и он нажимает кнопку «Отправить», форма перезагружается с сообщением об ошибке, и все теги исчезают.Есть ли простой способ получить теги в Django?
[РЕДАКТИРОВАТЬ]
Попытка сделать это на основе ответа Хейлвуда ниже...
<ul name="event_tag" class="tags">
<li class="tagit-choice" tagvalue="3">
Dog
<a class="tagit-close">x</a>
</li>
</ul>
Однако когда я загружаю страницу, этот конкретный тег не загружается?Похоже, ul
тег очищается, а затем в него загружается другая информация.Я его не вижу при загрузке страницы.
Я также попробовал, как показано ниже:
<ul name="event_tag" class="tags">
<li data-value="3">Dog</li>
</ul>
Когда я пробую таким образом, он появляется на секунду, а затем исчезает...
[РЕДАКТИРОВАТЬ 2]
Нашёл решение своей проблемы.Как предположил Хейлвуд, программно мы можем создать li
как показано ниже:
<ul name="event_tag" class="tags">
<li data-value="3">Dog</li>
</ul>
Причина, по которой это не сработало для меня, заключалась в том, что у меня были начальные значения:
$.getJSON("ajaxrequest.json", function(data) {
$(".tags").tagit("fill", data);
});
Проблема для меня заключалась в том, что при загрузке все исчезало.Причина этого в том, что fill
.Когда мы заменим fill
с add
согласно: $(".tags").tagit("add", data);
, тогда это работает.
Решение
Будучи создателем упомянутого вами плагина tagit, я думаю, я мог бы вам помочь.
Судя по тому, что я вижу, похоже, что вы используете его как часть формы, и когда вы нажимаете «Отправить», вы проверяете форму на стороне сервера. Если возникает ошибка, вы перезагружаете страницу со значениями формы на буксире?
Я бы посоветовал вам включить опцию скрытого выбора (select: true
).
После отправки формы вы получите список выбранных тегов.
Затем, если вы перезагрузите страницу, просто загрузите теги обратно в список как <li>
с.
(Обратите внимание, что я не знаю Python, поэтому ниже приведен псевдокод)
if(form_values.tags)
for(tag in form_values.tags)
print '<li data-value=" '+tag.value+' "> '+tag.label+' </li>';
endfor;
endif;
*Вы также можете передать теги в initialTags
вариант, но для этого потребуется вывести javascript, что, по моему мнению, менее аккуратно, чем описанный выше метод :)
Другие советы
Вам следует проверить поддержку тегов jQuery Select2.