博客类别 Slugify 在 Django 中不起作用

Posted

技术标签:

【中文标题】博客类别 Slugify 在 Django 中不起作用【英文标题】:Blog Category Slugify is not working in Django 【发布时间】:2021-09-18 21:51:50 【问题描述】:

当我点击帖子类别时出现错误,它显示Field 'id' expected a number but got 'coding'。

每个帖子都添加到以下类别下是我的代码:

型号:

class Categories(models.Model):
    name = models.CharField(max_length=200)
    

    class Meta:
        verbose_name_plural = 'Categories'

    def __str__(self):
        

        return self.name

class Item(models.Model):
    title = models.CharField(max_length=100)
    description= RichTextField(blank=True, null=True)
    main_image= models.ImageField(null=True, blank=True,upload_to='images/')
    date = models.DateTimeField(auto_now_add=True)
    item_category = models.ForeignKey(Categories, default='Coding', on_delete=SET_DEFAULT)
    slug = models.SlugField(null=False, unique=True) # new

查看:

def CategoryView(request, cats):
    category_posts = Item.objects.filter(item_category=cats.replace('-',''))
    return render(request, 'waqart/categories.html', 'cats':cats.title(), 'category_posts':category_posts )

网址:

urlpatterns = [
    path('', ItemListView.as_view(), name='waqart-home'),
    path('add_item/', ItemCreateView.as_view(), name='create_item'),
    path('item/<int:pk>/', ItemDetailView.as_view(), name='item_detail'),
    path('item/edit/<int:pk>/', ItemUpdateView.as_view(), name='item_update'),
    path('category/<str:cats>/', CategoryView, name='category'),

我是 django 新手,如果有人可以为我解决这个问题,我不胜感激

【问题讨论】:

分享你的Category模型,你为什么用cats.replace('-', '') @WillemVanOnsem 类别模型已添加。如果类别是两个单词,则使用替换方法 【参考方案1】:

你需要过滤item_category名称,所以:

def CategoryView(request, cats):
    category_posts = Item.objects.filter(
        item_category__name=cats.replace('-','')
    )
    return render(request, 'waqart/categories.html', 'cats':cats.title(), 'category_posts':category_posts )

【讨论】:

很好用。但它适用于像“编码”这样的单一类别名称,但如果类别名称像“英雄横幅”,它不会加载帖子如果你也可以帮助我,请感谢它。提前非常感谢 @Waqart:嗯,这意味着没有Category 名称为'hero banner',可能空间已被删除,因此您使用cats.replace('-', '').replace(' ','') 但实际上手动slugifying 不是一个好主意:你最好定义一个 slug 字段,并用它来过滤:django-antipatterns.com/antipattern/… 谢谢,我会阅读并尝试修复它。非常感谢您的支持。

以上是关于博客类别 Slugify 在 Django 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

ListView中多个上下文中特定上下文的分页在django中不起作用?

为啥“发布”方法在我的 django 应用程序中不起作用?

命名 url 在 django 1.5 和 python 2.7 中不起作用

盖茨比类别 slugs 在动态类别页面中不起作用

Django:Slugify 发布数据

在 django 中使用 slugify 后的详细页面错误