3

模型.py

class Tag(models.Model):
    name = models.CharField(max_length=64, unique=True)     
    slug = models.SlugField(max_length=255, unique=True)

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)
        super(Tag, self).save(*args, **kwargs)


网址.py

url(r'^tag/(?P<slug>[A-Za-z0-9_\-]+)/$',
    TagDetailView.as_view(),
    name='tag_detail'),      


视图.py

class TagDetailView(DetailView):
    model = Tag
    template_name = 'tag_detail_page.html'
    context_object_name = 'tag'

这给了我一个 404:

Page not found (404)
http://localhost:9999/tag/RandomTag/
No tag found matching the query

为什么 Django 无法根据 slug 字段获取正确的对象?

4

2 回答 2

4

Django的slugify方法:

转换为小写,删除非单词字符(字母数字和下划线)并将空格转换为连字符。还去除前导和尾随空格。

您正在寻找 Camel Case 的标签:

http://localhost:9999/tag/RandomTag/

你需要使用小写:

http://localhost:9999/tag/randomtag/  # or `random-tag` depending on the name

检查您的数据库以查看确切的slug保存方式

于 2013-08-15T10:31:21.227 回答
1

蒂米的回答在确定问题方面是正确的——蛞蝓是小写的。他建议您使用小写的网址。不错的解决方案......但也许你喜欢这样的网址?

如果您希望 slug 不区分大小写, slug_field = 'slug__iexact'请在您的视图中设置。

于 2013-08-15T10:45:23.767 回答