【问题标题】:Create Django slug method创建 Django slug 方法
【发布时间】:2016-05-17 14:23:18
【问题描述】:

我刚开始使用 Django 有一段时间了,我一直在尝试使用 slug。我知道它们是什么,但我很难定义一个简单的 slug 并将其显示在我的浏览器上。

这里是场景:我有一个models.py,其中包含一个具有3 个字段的课程书:名称、价格和Autor。我想用连字符 (-) 和小写字母为 name 和 autor 返回一个 slug 字符串。

我的问题是如何实现这一点。仅使用模型、视图和 html。这是我到目前为止所拥有的。但不知道如何让它显示在我的浏览器上(localhost:8000/book_name)

class Book(models.Model):
    name = models.CharField(max_length=100)
    price = models.IntegerField(default=0)
    autor = models.CharField(max_length=100)

    slug = models.SlugField(unique=True)

    @models.permalink
    def get_absolute_url(self):
        return 'app:book', (self.slug,)

【问题讨论】:

    标签: python django django-models django-templates django-views


    【解决方案1】:
    from django.template.defaultfilters import slugify
    

    将以下内容添加到您的模型中:

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

    然后你可以在你的 url 中使用 slug:

    url(r'mybooks/(?P<slug>[-\w]+)/$', views.BookDetailView.as_view(),name='book_details'),
    

    观看次数:

    from django.views import generic
    
    class BookDetailView(generic.DetailView):
    
       template_name = "templates/book_detail.html"
    

    【讨论】:

    • 我如何将它调用到 url?我想修改我的 urls.py 文件?
    • 所以我按照描述编辑了我的 urls.py,但没有发生任何事情:127.0.0.1:8000/book_details
    • 你有 BookDetailView 和模板吗?
    • 我有一个包含我的 html 的模板文件。但是没有 BookDetailView
    • 已更新,但你真的应该选择一个教程并花 2-3 小时进入 django
    【解决方案2】:

    您可以将其添加到您的 models.py 文件中:

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

    它对我有用。

    【讨论】:

      猜你喜欢
      • 2014-11-06
      • 2015-02-26
      • 2010-10-24
      • 2011-01-11
      • 2012-04-10
      • 2011-02-21
      • 2015-02-24
      • 2018-08-05
      • 2018-08-12
      相关资源
      最近更新 更多