如何在 Django 中自动化制作 URL 的 slug

问题描述

我正在制作一个博客,我需要使 slug 自动将 URL 作为您打开的每篇文章标题,而不必每次都手动进行

解决方法

有多种方式,我已经解释了一些简单易行的

您可以通过 admin.py 添加

class ModelAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("your_field_name",)}

admin.site.register(Model,ModelAdmin)

您可以在模型保存方法上使用 slugify

示例

class Test(models.Model):
    q = models.CharField(max_length=30)
    s = models.SlugField(editable=False) # hide from admin

    def save(self):
        if not self.id:
            self.s = slugify(self.q)

        super(Test,self).save()
,

如果您想在管理表单中看到自动填充的字段。

from django.contrib import admin
from .models import Post

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    # This will be populating the slug field as you enter the title in the post form on admin site
    prepopulated_fields = {'slug': ['title',]} 

在管理站点之外,只需确保覆盖 post model...

from django.db import models
from django.template.defaultfilters import slugify

Class Post(models.Model):
    title = models.CharField(max_length=50)
    slug = models.SlugField(max_length=100)

    def save(self,*args,**kwargs):
        if self.title:
            self.slug = slugify(self.title)

        super(Post,self).save(*args,**kwargs)

这应该可以有效地完成工作。