Django - 如何在表单中自动生成slug?

时间:2013-01-11 17:34:43

标签: django django-forms

我通过 CreateView 生成表单:

#urls.py
url(r'^add/$', ServerAdd.as_view(template_name="add.html")),

#views.py
from django.views.generic import CreateView
from servers.models import Server

class ServerAdd(CreateView):
model = Server
success_url = '/index/'

models.py and add.html
一切都运作良好,但在网站上我必须输入 slug 。现在的问题是:如何在管理面板中自动生成slug?

我是newbi,所以我请逐步说明

2 个答案:

答案 0 :(得分:3)

应该注意的是,每次保存实例时,上面的答案都会产生一个新的slug;对于任何最终被共享的内容(例如作为URI的一部分)而言,这是不好的做法,因为任何带有书签的URI都将失效。

更完整的答案是How do I create a slug in Django?

答案 1 :(得分:1)

我喜欢使用此django snippet为每个项目创建一个独特的slug。这样,如果您有多个具有相同名称的项目,它将会增加item-1item-2。将代码段中的代码保存在名为slug.py的文件中。在models.py中,导入slug文件。然后,在定义模型类后,使用save覆盖unique_slugify方法:

from myapp.slug import unique_slugify

class Server(models.Model):
    name = models.Charfield(max_length=20)
    ....

    def save(self, **kwargs):
        slug = '%s' % (self.name)
        unique_slugify(self, slug)
        super(Server, self).save()

这将根据服务器模型的name字段创建一个slug。要从不同的字段创建一个slug,请向modulus (%)运算符传递不同的值。