Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django DetailView未能基于SLUG找到对象_Django_Slug_Django Class Based Views - Fatal编程技术网

Django DetailView未能基于SLUG找到对象

Django DetailView未能基于SLUG找到对象,django,slug,django-class-based-views,Django,Slug,Django Class Based Views,型号.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)

型号.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)
url(r'^tag/(?P<slug>[A-Za-z0-9_\-]+)/$',
    TagDetailView.as_view(),
    name='tag_detail'),      
class TagDetailView(DetailView):
    model = Tag
    template_name = 'tag_detail_page.html'
    context_object_name = 'tag'

url.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)
url(r'^tag/(?P<slug>[A-Za-z0-9_\-]+)/$',
    TagDetailView.as_view(),
    name='tag_detail'),      
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字段获取正确的对象?

Django的方法:

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

您正在寻找一个Camel Case'd标签:

http://localhost:9999/tag/RandomTag/
您需要使用小写字母:

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

检查数据库,查看
slug
是如何保存的

蒂米的答案在确定问题时是正确的——slug是小写的。他建议您使用小写url。这是个不错的解决方案。。。但也许你喜欢这样的url


如果希望slug不区分大小写,请在视图上设置
slug\u字段='slug\u iexact'

slug通过
slagify
函数过滤后,以小写形式保存到DB中。除非您编写自己的
slagify
函数,否则它在数据库中始终是小写的,因此更改查询将无济于事是的,slug在数据库中是小写的。。。但URL中的slug显然不是。这就给了您两个选择:对slug调用
str.lower()
,或者执行不区分大小写的查询。虽然更改字符串的大小写可能对DB更好,但将查询更改为
\uuuuIExact
对编写来说是微不足道的。。。。或者首先使用正确的子弹当然。。。正如您所建议的那样(
;)