Перевод тегов в taggit

20 марта 2018 г. 2:12

Шаблон spec/messages.html не найден

Для перевода используется пакет parler.

Используйте дополнительное поле title. Не добавляйте перевод полю name для django-taggit, так как на поле name завязано много функциональности

from parler.models import TranslatableModel, TranslatedFields
from taggit.managers import TaggableManager from taggit.models import GenericTaggedItemBase, TagBase, ItemBase

class MyTag(TagBase, TranslatableModel):
    translations = TranslatedFields(
        title=models.CharField(_('Title'), max_length=100),
    )

    @permalink
    def get_absolute_url(self):
        return 'tag_page', (self.slug, )

    class Meta:
        ordering = ('name', )
        verbose_name = _('Tag')
        verbose_name_plural = _('Tags')


class MyTaggedItemBase(ItemBase):
    tag = models.ForeignKey(MyTag, related_name='tag_items', on_delete=models.CASCADE)

    class Meta:
        abstract = True

    @classmethod
    def tags_for(cls, model, instance=None, **extra_filters):
        kwargs = extra_filters or {}
        if instance is not None:
            kwargs.update({
                '%s__content_object' % cls.tag_relname(): instance
            })
            return cls.tag_model().objects.filter(**kwargs)
        kwargs.update({
            '%s__content_object__isnull' % cls.tag_relname(): False
        })
        return cls.tag_model().objects.filter(**kwargs).distinct()


class MyTaggedItem(GenericTaggedItemBase, MyTaggedItemBase):
    def get_absolute_url(self):
        if not hasattr(self.content_object, 'get_absolute_url'):
            raise Http404

        return self.content_object.get_absolute_url()

    class Meta:
        verbose_name = _('Tagged Item')
        verbose_name_plural = _('Tagged Items')
        index_together = [
            ['content_type', 'object_id'],
        ]

 

Вывод тегов в шаблоне:

{% load i18n %}

{% with my_object.tags.all as tags %}
    {% if tags %}
        <div class="tags a_i_c">
            <p>
                <a href="{% url 'all_tags' %}" title="{% trans 'Show all tags' %}">{% trans 'Tags' %}</a>:
                {% for tag in tags %}
                    <a href="{% url 'tag_page' tag.slug %}">{{ tag.title }}</a>{% if not forloop.last %}, {% endif %}
                {% endfor %}
            </p>
        </div>
    {% endif %}
{% endwith %}

 

Оцените статью

0 из 5 (всего 0 оценок)

Поля, отмеченные звёздочкой ( * ) , являются обязательными.

Спасибо за ваш отзыв!

Автор статьи

Права на использование материала, расположенного на этой странице http://vivazzi.ru/it/translations-for-tags/:

Разрешается копировать материал с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Мальцев Артём
Ссылка на статью: <a href="http://vivazzi.ru/it/translations-for-tags/">http://vivazzi.ru/it/translations-for-tags/</a>

Подробнее: Правила использования сайта

Комментариев: 0

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

Чтобы оставить комментарий от своего имени войдите или зарегистрируйтесь обычным способом или через социальные сети:

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте