Django DetailView 找不到基于 SLUG 的对象

标签 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).save(*args, **kwargs)

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

View .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 字段获取正确的对象?

最佳答案

Django 的 slugify 方法:

Converts to lowercase, removes non-word characters (alphanumerics and underscores) and converts spaces to hyphens. Also strips leading and trailing whitespace.



您正在寻找 Camel Case 的标签:
http://localhost:9999/tag/RandomTag/

你需要使用小写:
http://localhost:9999/tag/randomtag/  # or `random-tag` depending on the name

检查您的数据库以确切了解 slug已保存

关于Django DetailView 找不到基于 SLUG 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18250821/

相关文章:

django - 使用自定义 .update() 更新 DRF 可写嵌套序列化程序中的多对多关系时,如何更新实例中的值

python - 如何在不损坏 python 应用程序的情况下将其移动到服务器中的另一个文件夹?

php - Symfony2 - 一条 route 的多个 slug

python - 表单对象没有属性 'save_m2m' django

python - Django 错误中关于 Page 的顶级信息

python - 如何修复由 <functionwrapper at 0x7fd2e88c98c0>, "Cannot import name path"启动的线程中未处理的异常

php - 我无法获得完整的 slug/post 路线

php - .htaccess 文件从数据库中删除

django - 如何在基于单个类的 View 中装饰不同的 http 方法

python - Django 管理站点更改为普通 html