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

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

【问题讨论】:

    标签: python html django slug


    【解决方案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'
      猜你喜欢
      • 2010-09-07
      • 2020-02-21
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      相关资源
      最近更新 更多