我希望 Django 自动为此模型创建 slug:
\n\nclass 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)\nRun 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) \nRun 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\'\nRun Code Online (Sandbox Code Playgroud)\n\n我想自动创建 \'\xdb\x8c\xda\xa9-\xd8\xae\xd8\xa8\xd8\xb1-\xd9\x85\xd9\x87\xd9\x85\' 作为段头。
\ndjango 1.9 版中引入的新选项是 SlugField.allow_unicode
如果为 True,则除 ASCII 字母外,该字段还接受 Unicode 字母。默认为 False。文档
例如:
在 models.py 文件中,定义 slug 列,如下所示:
slug = models.SlugField(allow_unicode=True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3528 次 |
| 最近记录: |