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

标签 django utf-8 slug

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

class News(models.Model):
    title = models.CharField(max_length=100)
    body = models.TextField()
    teaser = models.TextField('teaser', blank=True)
    created=models.DateTimeField(auto_now_add=True)
    pub_date=models.DateTimeField(default=datetime.datetime.now)
    categories = models.ManyToManyField(Category, blank=True)
    likes = models.IntegerField(default=0)
    visits = models.IntegerField(default=0)
    slug = models.CharField(max_length=100, unique=True) 

    def __unicode__(self):
        return unicode(self.title)

    def save(self, *args, **kwargs):
        self.title = slugify_unicode(self.title)
        super(News, self).save(*args, **kwargs)

我使用 CharField 而不是 slugfield 因为 Slug fields can only contain ASCII letters, numbers, dashses and underlines 但我想创建基于波斯标题的 slugs。

我的 views.py 有这个功能来创建新闻项目:
@staff_member_required
def add_news(request):
    if request.method == 'POST':
        form = NewsForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/all_news')

    if request.method == 'GET':
        form = NewsForm()
        args = {}
        args.update(csrf(request))
        args['form'] = form
        return render_to_response('news/add_news.html', args)  

当我手动创建波斯 slug 时,这很好用,但这真的很麻烦。所以我想知道是否有办法让 Django 在保存时根据标题创建 slug。

例如,当标题是:
'یک خبر مهم'

我想自动创建 'یک-خبر-مهم' 作为 slug。

最佳答案

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

如果为 True,则该字段除了接受 ASCII 字母外还接受 Unicode 字母。默认为假。 doc

例如:

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

slug = models.SlugField(allow_unicode=True)

关于django - 如何在 Django 中自动创建 utf8 slug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21501362/

相关文章:

perl - 使用 unicode 字符创建文件名

javascript - 获取链接的最后一个字符串

python - 检查字符串是否是名称的可能缩写

django-rest-framework 身份验证 : require key parameter in URL?

django - HttpResponse 与渲染

python - 在 Django 中到达/下载文件时,我应该如何执行权限检查?

python - django:禁用某一特定字段的tinymce

java - 如何将 ASCII 转换为字符串

python - 在这种情况下,python 中的 MySQLdb 模块是否返回 utf8 编码或 unicode?

php - 如何避免基于 2 个表的重复 slug 并创建唯一的 slug