如何在 Django 中自动生成 URL

how to automate the slug in making URL in Django

我正在写博客,我需要让 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)

这应该能有效地完成工作。