You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django项目的Slug字段中使用括号?

如何在Django项目的Slug中使用括号

默认Django的SlugField和内置slugify()函数会过滤掉括号这类特殊字符,要实现支持括号的slug,需要做以下几步:

1. 自定义支持括号的slug生成函数

替换原生slugify(),保留括号字符:

from django.utils.text import slugify as django_slugify

def custom_slugify(value):
    # 保留括号,再调用原生slugify处理其他字符
    processed_value = value.replace('(', '(').replace(')', ')')
    return django_slugify(processed_value, allow_unicode=True)

2. 重写模型save方法自动生成slug

如果需要从其他字段(如标题)自动生成带括号的slug,在模型的save()方法中调用自定义函数:

from django.db import models

class YourModel(models.Model):
    title = models.CharField(max_length=200)
    slug = models.SlugField(max_length=100, unique=True, null=True, allow_unicode=True)

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = custom_slugify(self.title)
        # 处理slug重复的情况(可选)
        original_slug = self.slug
        counter = 1
        while YourModel.objects.filter(slug=self.slug).exclude(pk=self.pk).exists():
            self.slug = f"{original_slug}-{counter}"
            counter += 1
        super().save(*args, **kwargs)

3. 替换默认验证器

原生SlugField的验证器不允许括号,需要自定义验证器允许这类字符:

from django.core.validators import RegexValidator

# 自定义验证规则:允许字母、数字、下划线、连字符、括号,支持unicode
slug_validator = RegexValidator(
    r'^[\w\-\(\)]+$',
    message="slug只能包含字母、数字、下划线、连字符和括号"
)

class YourModel(models.Model):
    slug = models.SlugField(
        max_length=100,
        unique=True,
        null=True,
        allow_unicode=True,
        validators=[slug_validator],
        default=None
    )

注意事项

  • 如果是手动输入slug,需确保前端输入框支持括号输入;
  • 由于设置了unique=True,务必处理slug重复的场景,避免保存失败。

内容的提问来源于stack exchange,提问作者Soma Fridgg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 14:18:19