slug
的含义是标称,在Django
中,slug
值有效url
的一部分,能使url
更加清晰易懂,比如有一篇文章,标题是“测试”,如果使用slug
,那么它的url
是/article/ce-shi/
,后面的部分就是slug
,相比起使用id
作为url
,slug
更加简明易懂
Django中使用
基本使用
- 定义模型类
from django.db import models class Article(models.Model): title = models.CharField(max_length=100, verbose_name="文章标题") slug = models.SlugField(uniqe=True)
- 定义视图
class ArticleDetailView(View): """文章详情视图""" def get(self, request, slug): # 查询指定slug对应的文章 article = Article.objects.filter(slug=slug).first() data = { 'title': article.title, 'slug': article.slug } return JsonResponse({"data": data})
- 定义路由
path("article/<slug: slug>/",ArticleDetailView.as_view())
至此,简单slug
从定义到使用全部说完了
进阶用法
其实在Django
中为了方便生成slug
,Django
为我们提供了一个方法slugify
from django.template.defaultfilters import slugify slugify("hello word") > "hello-word" slugify("测试") > ""
可以看到,自带的slugify
是不支持中文的,这样我们就需要使用一个叫django-uuslug
的包
pip install django-uuslug
from uuslug import slugify slugify("hello word") > "hello-word" slugify("测试") > "ce-shi"
这样的话我们就可以将以上定义的模型改为
from django.db import models from uuslug import slugify class Article(models.Model): title = models.CharField(max_length=100, verbose_name="文章标题") slug = models.SlugField(uniqe=True) def save(self, *args, **kwargs): self.slug = slugify(self.title) super().save(*args, **kwargs)
我们也可以将我们视图改为
from django.views import generic class ArticleDetailView(generic.DetailView): model = Article template_name = "detail.html" context_object_name = "article"
此视图将会返回一个名为article
的Article
对象
版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:https://www.ltfred.com/article/django-slug/