Интеграция с django ------------------- .. py:currentmodule:: pymorphy._morph Настройка ^^^^^^^^^ 1. Добавляем ``'pymorphy'`` в ``INSTALLED_APPS``. 2. Описываем в settings.py установленные словари:: PYMORPHY_DICTS = { 'ru': { 'dir': '/usr/share/pymorphy/ru' }, } более сложный пример:: PYMORPHY_DICTS = { 'ru': { 'dir': os.path.join([PROJECT_DIR, 'files', 'dicts']), 'backend': 'cdb', 'use_cache': False, }, } Параметры: * ``dir`` - обязательный параметр, путь до папки с файлами; * ``backend`` - используемое key-value хранилище ('sqlite' по умолчанию); * ``use_cache`` - использовать ли кэш (True по умолчанию). Получение экземпляра анализатора для ручного использования ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ В случае, когда настроена интеграция pymorphy с django, экземпляр анализатора следует получать следующим образом:: from pymorphy.django_conf import default_morph as morph Не стоит получать экземпляр анализатора через :meth:`pymorphy.get_morph ` во вьюхах (или еще где-то на каждый запрос) - это приведет к утечке ресурсов. Шаблонные фильтры ^^^^^^^^^^^^^^^^^ Фильтры подключаются следующей командой: .. code-block:: django {% load pymorphy_tags %} .. _inflect-filter: inflect ####### Меняет грамматическую форму каждого слова на указанную в параметрах. Про доступные параметры можно почитать :ref:`тут (см. "Полный формат") `. Пример: .. code-block:: django {# в переменной city "Нижний Новгород" #} {% load pymorphy_tags %} Мы начали работу в {{ city|inflect:"пр" }}! {# выведет "Мы начали работу в Нижнем Новгороде!" #} Пример с несклоняемой частью .. code-block:: django {% load pymorphy_tags %} Не осталось у нас {{ "лошадь [[Пржевальского]]"|inflect:"рд,мн" }}. {# выведет "Не осталось у нас лошадей Пржевальского" #} .. _inflect_marked-filter: inflect_marked ############## Идентичен фильтру inflect за исключением того, что противоположным образом трактует [[ ]] .. code-block:: django {% load pymorphy_tags %} Не осталось у нас {{ "[[лошадь]] Пржевальского"|inflect_marked:"рд,мн" }}. {# выведет "Не осталось у нас лошадей Пржевальского" #} .. _plural-filter: plural ###### Ставит слово в форму, которая согласуется с заданным числом (1 попугай, 2 попугая, 5 попугаев). .. code-block:: django {% load pymorphy_tags %} {# в переменной num число попугаев (пусть = 38) #} На дереве {{ num }} {{ "попугай"|plural:num }}. {# выведет "На дереве 38 попугаев." #} {# в переменной animal - "лошадь" #} А еще есть {{ num }} {{ animal|plural:num }}. {# выведет "А еще есть 38 лошадей." #} Фильтры :ref:`inflect-filter` и :ref:`plural-filter` не склоняют все, что заключено в двойные квадратные скобки. Фильтр :ref:`inflect_marked-filter` - наоборот, работает только с тем, что в двойных квадратных скобках. Можно указать другие разделители (обязательно 2х-символьные), определив в settings.py переменные ``PYMORPHY_MARKER_OPEN`` и ``PYMORPHY_MARKER_CLOSE``. .. note:: Фильтры из pymorphy_tags стараются сохранить написание больших-маленьких букв (обрабатываются варианты "ВСЕ СЛОВО БОЛЬШИМИ", "С заглавной", "все маленькими"). Если по какой-то причине смена формы не удалась, возвращают исходную строку. .. warning:: Фильтры в настоящий момент могут плохо работать с именами и фамилиями.