Теги на русском django taggit
Мне нужно, чтобы при нажатии на тег - отображался список по этому тегу. Я уже сделал поиск по тегу, но он работает только на тегах на английском языке. Если писать теги на русском выходит ошибка NoReverseMatch. Использую django-taggit. Показал не весь, чтобы не загромождать
models.y
class Anime(models.Model):
tags = TaggableManager()
views.py
def animes(request, tag_slug=None):
"""Выводит списко аниме"""
animes = Anime.objects.all()
tag = None
if tag_slug:
tag = get_object_or_404(Tag, slug=tag_slug)
animes = animes.filter(tags__in=[tag])
context = {'animes': animes, 'tag': tag}
return render(request, 'sugar_p/animes.html', context)
urls.py
urlpatterns = [
# Домашняя страница
path('', views.index, name='index'),
# Страница со списком аниме.
path('animes/', views.animes, name='animes'),
# Поиск по тегу
path('animes/tag/<slug:tag_slug>/', views.animes, name='animes_by_tag'),
]
animes.html
{% for tag in anime.tags.all %}
<a href="{% url 'sugar_p:animes_by_tag' tag.slug %}">
{{ tag.name }}
</a>
{% if not forloop.last %}, {% endif %}
{% endfor %}
Я тоже столкнулся с этой проблемой, но решил немного по-другому. Сперва думал, может с самой либой что-то не так, ну не может в кириллицу, бывает, но проблема оказалась в другом месте.
Всё дело в конвертере пути slug. Как оказалось, он может только в ASCII-символы, а кириллицу туда не завезли, только латиницу. Поэтому я поменял конвертер slug на str, и всё заработало.
На примере приведённого в посте маршрута будет так (меняем конвертер slug на str):
path('animes/tag/<str:tag_slug>/', views.animes, name='animes_by_tag')