在Django模型中添加slug字段
什么是Django中的SlugField
它是一种生成有效URL的方法,一般使用已经获得的数据。例如,使用一篇文章的标题来生成一个URL。让我们假设我们的博客有一篇文章,标题为’The Django book by Geeksforgeeks’,主键id=2。我们可以用以下方式来引用这个帖子
或者,我们可以引用标题,如
但问题是空格在URL中是无效的,需要用%20代替,这很难看,使之成为以下内容
但这并不能解决有意义的URL。另一个选项可以是
因此,现在的标题是the-django-book-by-geeksforgeeks。所有的字母都是小写的,空格则由连字符–取代。
假设我们的博客文章模型看起来与此类似。
将Slugify加入到我们的项目中:
现在我们需要找到一种方法,将标题自动转换为蛞蝓。我们希望这个脚本在每次创建Post模型的新实例时被触发。为了这个目的,我们将使用信号。
注意:在保存settings.py文件的同一目录下添加新文件util.py。
Django中的信号:
在很多情况下,当一个模型的实例发生修改时,我们需要执行一些动作。Django为我们提供了一种优雅的方式来处理这些情况。信号是允许将事件与动作联系起来的实用工具。我们可以开发一个函数,当一个信号调用它时,它就会运行。
在post应用程序的models.py文件中,在定义了Post Model的地方,在同一个文件中添加这个。
pre_save_receiver函数应该被单独放在Post模型之外。
注意:在urls.py中用path(‘post/’, detail)编辑detail路径。在views.py中编辑detail函数,用
最后一步是在HTML文件<a href=”/posts/{{ a.slug }}” class=”btn btn-primary”>视图</a>
中添加链接。现在我们准备去127.0.0.1:8000/posts/title-you-have-added,它将向你展示details.html的页面。