当我在Django管理面板中放置波斯语标签时,我遇到了一个问题,我在模板中得到了这个错误:
Reverse for 'post_tag' with arguments '('',)' not found. 1 pattern(s) tried: ['tags/(?P<tag_slug>[-a-zA-Z0-9_]+)/\\Z']
**注意:**当我把英语和其他语言标记我没有得到这个错误,它的作品真.
models.py
from django.db import model
from taggit.managers import TaggableManager
class Article(models.Model):
...
tags = TaggableManager()
views.py
from django.views.generic import ListView
class ArticleTagList(ListView):
model = Article
template_name = 'blog/list.html'
def get_queryset(self):
return Article.objects.filter(tags__slug=self.kwargs.get('tag_slug'))
url.py
from django.url import path
from .views import ArticleTagList
app_name = 'blog'
urlpatterns = [
...
path("tags/<slug:tag_slug>/", ArticleTagList.as_view(), name='post_tag'),
...
]
blog/list.html
...
{% for tag in article.tags.all %}
<a href="{% url 'blog:post_tag' tag.slug %}">{{ tag.name }}</a>
{% endfor %}
...
enter image description here
我将django-taggit版本更改为最新版本bun不工作。我现在使用3.1.0版本。我该怎么办?有什么解决方案吗?
1条答案
按热度按时间mrphzbgm1#
我在尝试使用cyrillic标签时也遇到过类似的错误。问题原来不是在django-taggit本身,而是在路径转换器中。就像你一样,我在我的urlpatterns中使用了slug,它只适用于拉丁字母,每当我切换到cyrillic时,都会出现'Reverse not found'错误。
这里的问题是,slug路径转换器只理解ASCII符号,它只包含拉丁字母。我把它改为str路径转换器,
'tags/<str:tag_slug>'
,它可以很好地处理西里尔标记,所以也许它也可以为你工作。