如何在 Django 中自动生成 URL

Posted

技术标签:

【中文标题】如何在 Django 中自动生成 URL【英文标题】:how to automate the slug in making URL in Django 【发布时间】:2021-10-03 13:06:13 【问题描述】:

我正在创建一个博客,我需要让 slug 自动将 URL 作为您打开的每篇文章的标题,而我每次都必须手动完成

【问题讨论】:

【参考方案1】:

方法有很多种,我已经解释了几个简单易行的

您可以通过 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()

【讨论】:

【参考方案2】:

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

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)

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

【讨论】:

我收到一条错误消息,指出('Post' 对象没有属性 'publish')我该怎么办?这是正确的? unique_for_date='发布' ???? 见更新的答案兄弟。删除unique_for_date='publish'

以上是关于如何在 Django 中自动生成 URL的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 管理页面上创建锚点以自动从 url 向下滚动到内联或字段

如何从视图生成 Django 管理站点中特定项目的 url?

Django之反向生成url

如何修复 Django 中的自动登录?

如何在 django url 中转义“/”

Django/Webpack - 如何使用 webpack 开发服务器提供生成的 webpack 包