如何在Django中自动创建utf8 slug?

qli*_*liq 4 django utf-8 slug

我希望 Django 自动为此模型创建 slug:

\n\n
class News(models.Model):\n    title = models.CharField(max_length=100)\n    body = models.TextField()\n    teaser = models.TextField(\'teaser\', blank=True)\n    created=models.DateTimeField(auto_now_add=True)\n    pub_date=models.DateTimeField(default=datetime.datetime.now)\n    categories = models.ManyToManyField(Category, blank=True)\n    likes = models.IntegerField(default=0)\n    visits = models.IntegerField(default=0)\n    slug = models.CharField(max_length=100, unique=True) \n\n    def __unicode__(self):\n        return unicode(self.title)\n\n    def save(self, *args, **kwargs):\n        self.title = slugify_unicode(self.title)\n        super(News, self).save(*args, **kwargs)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我使用 CharField 而不是 slugfield,因为Slug 字段只能包含 ASCII 字母、数字、破折号和下划线,但我想创建基于波斯语标题的 slug。

\n\n

我的views.py有这个函数来创建新闻项目:

\n\n
@staff_member_required\ndef add_news(request):\n    if request.method == \'POST\':\n        form = NewsForm(request.POST)\n        if form.is_valid():\n            form.save()\n            return HttpResponseRedirect(\'/all_news\')\n\n    if request.method == \'GET\':\n        form = NewsForm()\n        args = {}\n        args.update(csrf(request))\n        args[\'form\'] = form\n        return render_to_response(\'news/add_news.html\', args)  \n
Run Code Online (Sandbox Code Playgroud)\n\n

当我手动创建波斯蛞蝓时,这很好用,但这确实很麻烦。所以我想知道是否有一种方法可以让 Django 在保存时根据标题创建 slug。

\n\n

例如,当标题是:

\n\n
\'\xdb\x8c\xda\xa9 \xd8\xae\xd8\xa8\xd8\xb1 \xd9\x85\xd9\x87\xd9\x85\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想自动创建 \'\xdb\x8c\xda\xa9-\xd8\xae\xd8\xa8\xd8\xb1-\xd9\x85\xd9\x87\xd9\x85\' 作为段头。

\n

Moj*_*efi 7

django 1.9 版中引入的新选项是 SlugField.allow_unicode

如果为 True,则除 ASCII 字母外,该字段还接受 Unicode 字母。默认为 False。文档

例如:

在 models.py 文件中,定义 slug 列,如下所示:

slug = models.SlugField(allow_unicode=True)
Run Code Online (Sandbox Code Playgroud)