django - django 中的 SlugField 有什么用?
问题描述
注意:请不要认为它是重复的帖子,所有现有的帖子都不能清楚地了解 SlugField。
我的问题是“我们可以将值 sluggify 并将其存储在 CharField 中,对吧?那为什么我们需要 SlugField 来完成使用 CharField 可以轻松完成的事情?”
例如,在我的模型中,我有一个名为
url = models.CharField(max_length=30)
def save(self, ...):
self.url = slugify(self.url)
.......
网址不会以slugified格式保存在数据库中吗?我可以在浏览器中使用这个slugified值,那么创建models.SlugFIeld(max_length = 30)有什么用?SlugField 将比 slugified CharField 添加什么优势?
在上面的代码中,用“SlugField”替换“CharField”有什么好处?
解决方案
我们可以
slugify
将值存储在 CharField 中,对吗?那么为什么我们需要 SlugField 来做一些可以轻松使用的事情CharField
呢?
ASlugField
是一个CharField
,但是一个特殊的CharField
。它是一个包含验证器的字段,例如,如果您通过表单输入数据,则验证输入的字符串是否确实是 slug。例如,slug 不包含空格,因此如果您SlugField
在表单中使用 ,以便作者可以自己指定 slug,它将拒绝此类 slug。
默认情况下,它使用django.core.validators.validate_slug
验证器 [GitHub]。SlugField
有一个额外的参数allow_unicode
。如果设置为True
,它将使用django.core.validators.validate_unicode_slug
验证器 [GitHub]。
所以本质上它确实是一个,但是有一个由**参数 [Django-doc]CharField
确定的验证器。因此,这使其更加方便。allow_unicode=…
通常,您不想对 slug 字段本身的内容进行 slug 化,而是从另一个字段(例如博客文章条目的标题)。因此,您仍然希望保留标题,但制作一个 slugified 变体。
django-autoslug
包 [readthedocs]提供了一个更方便的AutoSlugField
[readthedocs],因为您可以定义如何填充该字段,因此它会自动 slugify:
from autoslug import AutoSlugField
class MyModel(models.Model):
title = models.CharField(max_length=128)
slug = AutoSlugField(populate_from='title')
推荐阅读
- output - 如何使用 esttab 创建具有不同单元格的列
- awk - 用其他文件中的字符串替换一个文件中的字符串
- python - Windows批处理文件无限循环在运行Python文件时挂起
- c# - 如何使用 Helix API 监听 Twitch 用户在线状态?
- r - R中ggplot图例中颜色条上的离散截止值对称
- php - 使用 PHP 获取访问令牌 LinkedIn 注册 API 后如何同时获取电子邮件地址和其他信息(如姓名和电话)
- powershell - 使用 PowerShell 在 ADFS 实例中查找所有过期的声明提供程序证书
- python-3.x - 调用已定义的方法会导致 NameError
- r - “Fisher 测试错误:LDSTP 太小”是什么意思?
- spring - 为什么应用程序不公开 /health-check-path 端点?