为了账号安全,请及时绑定邮箱和手机立即绑定

Django 全局覆盖 slugify

Django 全局覆盖 slugify

偶然的你 2021-09-14 09:46:10
我遇到了 Django 内置slugify函数的问题。我正在使用 Django 框架构建一个网站。该网站必须有一个论坛应用程序。经过一番搜索,我找到了一个。它工作得很好,但是,它slugify在主题标题上大量使用该功能来创建指向其页面的“人类可读”链接。问题是,我们是用俄语编写的,因此它会生成非 ASCII URL,当尝试从浏览器复制链接时,这些 URL 看起来像是一团不可读的 unicode 数据(并且在尝试记录它们时也会抛出异常) )。有没有办法django.utils.text.slugify为整个项目全局覆盖 Django 的,所以我不需要包含一半的第三方库只是为了更改import它们中的语句models.py?
查看完整描述

2 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

我认为您可以定义一个抽象模型类,并使用 slugify 函数覆盖 save 方法。像这样:


class AbstractBase(models.Model):

   slug = models.SlugField()


   class Meta:

      abstract = True


   def save(self, *args, **kwargs):

       self.slug = slugify.Slugify(self.slug)

       return super(AbstractBase, self).save(*args, **kwargs)

并将您的其余模型从这个abstract类中子类化,例如:


class Post(AbstractBase):

   # rest of the post fields

这样,slugify 将只在一个地方完成,并在所有模型中全局工作。


查看完整回答
反对 回复 2021-09-14
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

它不是全局的一种方法是编写自己的 slugify 函数,然后您可以通过在要对标题/名称字段进行 slugify 的模型的覆盖保存方法中调用它来利用它。


例如。


class Post(models.Model):

  title = models.CharField(max_length=512)

  slug  = models.CharField(max_length=1024)


  def save(self, *args, **kwargs):

     your_slugify_function(self, self.title)

     super(Post, self).save(*args, **kwargs)


查看完整回答
反对 回复 2021-09-14
  • 2 回答
  • 0 关注
  • 181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信