Маленькое приложение для Django, которое реализует возможность приписывать теги к произвольным объектам в вашем приложении, отображать их и редактировать в формах.

В формах, созданных джанговскими манипуляторами, теги отображаются в виде небольших текстовых строк ввода. При вводе текста возникает автоподсказка из значений существующих в БД тегов. Список фильтруется по введенным символам с игнорированием незначительных отличий написания (знаки препинания, пробелы, слово "the").

Добавление тегов происходит полностью по инициативе пользователя: если пользователь добавил тег, которого нет, тот автоматически создается.

Скачать версия 1.9

Как пользоваться

Скачать, поместить куда-нибудь в ваш проект, и прописать директорию приложения в настройки в INSTALLED_APPS. Там же, в настройках, проследите, чтобы в TEMPLATE_LOADERS был раскомментирован 'django.template.loaders.app_directories.load_template_source', чтобы библиотека находила шаблон контрола для форм.

Добавить теги к вашей модели:

from myproject.tags.models import Tag
from myproject.tags import fields

class Article(models.Model):
  ...
  tags = fields.TagsField(Tag)


Полем "tags" в коде можно пользоваться точно так же, как стандатным ManyToManyField с той разницей, что во всех формах, созданных с помощью автоматических манипуляторов (включая и те, которые создаются в generic views) для тегов будет отображаться отдельный блок редактирования.

Для собственных манипуляторов это поле можно включать явно:

from django.forms import Manipulator
from myproject.tags import fields

class MyManipulator(Manipulator):
  def __init__(self):
    self.fields = [
      ...
      fields.TagsFormField('tags'),
    ]

Все существующие в системе теги обычно хранятся в собственной модели Tag, которая есть в библиотеке. Они используются, в частности, и для автоподсказки в формах. Если вместо встроенной модели используется своя, надо научить поле манипулятора использовать именно ее:

self.fields = [
  ...
  fields.TagsFormField('tags', model=some.other.TagModel),
]

Настройки

В большинстве случае, для того, чтобы поле тегов начало работать, ему надо указать две настройки:

JS_URL
URL к папке, в которой лежит файл "tags.js" из комплекта приложения. Можно перенести его к вашим скриптам, а можно оставить в исходной папке, но в настройках веб-сервера прописать путь к ней для того, что написано в JS_URL.
STYLE_URL
URL к папке, в которой лежит графика и стиль для контрола тегов из папки "style" в дистрибутиве.

Если эти две настройки не указаны, то по умолчанию будут использованы /media/js/ и /media/css/. Поэтому если ваши скрипты и стили лежат по этим путям, то настройки не обязательным, можно просто перенести туда файлы из дистрибутива :-).

Еще одна не обзяательная настройка:

TAGS_URL
URL к странице тега на вашем сайте, если она есть. Чаще всего такой страницей служит поиск объектов, у которых есть данный тег. Выглядит как "http://domain/path/%s/", и тег подставляется в строку вместо %s. Если настройка не задана, то названия тегов отображаются без ссылки.

Использование в админке Django

Поле будет автоматически отображаться в админке, но чтобы оно нормально работало, надо подключить javascript тегов к модели:

class MyModel(models.Model):
  ...

  class Admin:
    js = (
      'js/tags.js',
    )

Поскольку админка использует относительные URL, надо скопировать "tags.js" в директорию media-файлов админки.

Чтобы это поле еще и нормально выглядело, надо записать все стили тегов в CSS-файлы админки.

Новости