猿问

Django 全局覆盖 slugify

我遇到了 Django 内置slugify函数的问题。我正在使用 Django 框架构建一个网站。该网站必须有一个论坛应用程序。经过一番搜索,我找到了一个。它工作得很好,但是,它slugify在主题标题上大量使用该功能来创建指向其页面的“人类可读”链接。问题是,我们是用俄语编写的,因此它会生成非 ASCII URL,当尝试从浏览器复制链接时,这些 URL 看起来像是一团不可读的 unicode 数据(并且在尝试记录它们时也会抛出异常) )。

有没有办法django.utils.text.slugify为整个项目全局覆盖 Django 的,所以我不需要包含一半的第三方库只是为了更改import它们中的语句models.py


偶然的你
浏览 182回答 2
2回答

宝慕林4294392

我认为您可以定义一个抽象模型类,并使用 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 将只在一个地方完成,并在所有模型中全局工作。

凤凰求蛊

它不是全局的一种方法是编写自己的 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)
随时随地看视频慕课网APP

相关分类

Python
我要回答