【问题标题】:django-taggit 404 when using multiple word tagdjango-taggit 404 使用多个单词标签时
【发布时间】:2018-02-05 19:35:33
【问题描述】:
我正在实现 taggit 标签来创建页面的往返。我使用了 bakery-demo 中的示例代码。问题是我需要带有多个单词的标签,比如“设计思维”这样的两个词。后端巧妙地涵盖了这一点,创造了一种“设计思维”。但是列表视图不起作用。
它适用于单字标签,但双字标签会给我一个 404。
如果它在 bakery-demo 中工作,尝试过,但出现了同样的问题。
这在某种程度上是好的,这意味着我没有做错任何事。只是没有解决方案。
有人解决了这个问题吗?
【问题讨论】:
标签:
wagtail
django-tagging
【解决方案1】:
似乎 URL 匹配的正则表达式已设置为假定标签 slug 内只有一个单词。
这意味着路由总是会因为一个单词标签而失败。
原码
@route('^tags/$', name='tag_archive')
@route('^tags/(\w+)/$', name='tag_archive')
def tag_archive(self, request, tag=None):
#...
说明
请注意,匹配 my-blog/tags/some-awesome-tag/ 的 URL 的正则表达式只会匹配单个 word。正则表达式中的单词由\w 表示,不包含空格或破折号。
但是,一组单词或短划线看起来像[\w-],方括号表示匹配这些括号内的任何内容,短划线表示也匹配短划线。
新代码
最终的新路由装饰器将如下所示:
@route('^tags/$', name='tag_archive')
@route('^tags/([\w-]+)/$', name='tag_archive') # this line changed
def tag_archive(self, request, tag=None):
#...
注意:提交 PR 以在 bakerydemo 中解决此问题。