在 Django 模型内添加 slug 字段
在本教程中,我们将学习 Django 中的 SlugField。
SlugField
SlugField 是一种使用现有数据生成 URL 的方法。你可以使用文章或页面的标题来生成 URL。我们来看一个详细的示例。
假设我们有一篇文章,名称为 来自 Tutorialspoint,id = 5。那么,我们可以将 URL 设为 www.tutorialspoint.com/posts/5/。内容编写者很难通过之前的 URL 识别文章。但是,如果你有一个类似 www.tutorialspoint.com/this-isfrom-tutorialspoint 的 URL,那么我们就可以很容易地识别出这篇文章。所以,SlugField 用于生成此类 URL。
我们来看一下我们的文章模型的代码。将你的模型与以下模型进行比较。
CHOICES = (
('draft', 'Draft'),
('published', 'Published'),
)
class Article(models.Model):
title = models.CharField(max_length = 250)
slug = models.SlugField(max_length = 250, null = True, blank = True)
text = models.TextField()
published_on = models.DateTimeField(auto_now_add = True)
updated_time = models.DateTimeField(auto_now = True)
status = models.CharField(max_length = 10, choices = CHOICES, default ='draft')
class Meta:
ordering = ('_Published_At', )
def __str__(self):
return self.title现在,我们将向我们的项目中添加 SlugField。因此,它将根据标题自动生成 URL。
在项目级别目录中创建一个名为 util.py 的文件。我们必须在每次调用 Post 模型时生成 URL。为了实现这一目标,我们需要信号。
import string
from django.utils.text import slugify
def get_random_string(size = 10, chars = string.ascii_lowercase + string.digits
return ''.join(random.choice(chars) for _ in range(size))
def get_slug(instance, slug = None):
if slug is not None:
slug_two = slug
else:
slug_two = slugify(instance.title)
Klass = instance.__class__
is_exists = Klass.objects.filter(slug_two = slug_two).exists()
if is_exists:
slug_two = "{slug_two}-{random_string}".format(slug_two = slug_two, ran
string = get_random_string(size = 5))
return get_slug(instance, slug = slug)
return slug_two在 models.py 文件的末尾添加以下代码。
def pre_save_receiver(sender, instance, *args, **kwargs): if not instance.slug_two: instance.slug_two = get_slug(instance) pre_save.connect(pre_save_receiver, sender = Article)
在urls.py中编辑路径,例如path('posts/', post)。根据代码编辑views.py。
def article(request, slug):
obj = Article.objects.filter(slug__iexact = slug)
if obj.exists():
obj = obj.first()
else:
return HttpResponse('Article Not Found')
context = {
'article': obj
}
return render(request, 'posts/post.html', context)
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP