在 slug 中编写波斯语并在 django 的地址栏中使用它
Write Persian in slug and use it in address bar in django
我使用 django 并且在我的模型中我想在 slugfield 中编写波斯语(通过使用 utf-8 或其他东西)并在页面地址中使用 slug
我为模型写这个 class:
class Category(models.Model):
name = models.CharField(max_length=20, unique=True)
slug = models.SlugField(max_length=20, unique=True)
description = models.CharField(max_length=500)
is_active = models.BooleanField(default=False)
meta_description = models.TextField(max_length=160, null=True, blank=True)
meta_keywords = models.TextField(max_length=255, null=True, blank=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL)
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Category, self).save(*args, **kwargs)
def __str__(self):
return self.name
def category_posts(self):
return Post.objects.filter(category=self).count()
但是保存后 slug 栏中没有任何内容,我不知道在 url 中写什么来显示波斯语。你能告诉我该怎么办吗?
我使用 django 1.9 和 python 3.6.
slugify
函数的 docstring 是:
Convert to ASCII if 'allow_unicode' is False. Convert spaces to hyphens.
Remove characters that aren't alphanumerics, underscores, or hyphens.
Convert to lowercase. Also strip leading and trailing whitespace.
因此您需要将 allow_unicode
标志设置为 True
以保留波斯语文本。
>>> text = 'سلام عزیزم! عزیزم سلام!'
>>> slugify(text)
''
>>> slugify(text, allow_unicode=True)
'سلام-عزیزم-عزیزم-سلام'
>>>
这个更好!!
slug = models.SlugField(max_length=20, unique=True, allow_unicode=True)
这里有一个您可以用于这种情况的示例:
先安装django_extensions
和pip
,如果没有安装
from django_extensions.db.fields import AutoSlugField
from django.utils.text import slugify
在 model.py 之前为您的 class 添加此功能:
def my_slugify_function(内容):
return slugify(内容,allow_unicode=真)
在您的 class 中添加此字段:
slug = AutoSlugField(populate_from=['name'], unique=True, allow_unicode=True,
slugify_function=my_slugify_function)
在url中必须使用这种格式:
re_path('person_list/(?P<slug>[-\w]+)/', views.detail, name='detail')
我使用 django 并且在我的模型中我想在 slugfield 中编写波斯语(通过使用 utf-8 或其他东西)并在页面地址中使用 slug 我为模型写这个 class:
class Category(models.Model):
name = models.CharField(max_length=20, unique=True)
slug = models.SlugField(max_length=20, unique=True)
description = models.CharField(max_length=500)
is_active = models.BooleanField(default=False)
meta_description = models.TextField(max_length=160, null=True, blank=True)
meta_keywords = models.TextField(max_length=255, null=True, blank=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL)
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Category, self).save(*args, **kwargs)
def __str__(self):
return self.name
def category_posts(self):
return Post.objects.filter(category=self).count()
但是保存后 slug 栏中没有任何内容,我不知道在 url 中写什么来显示波斯语。你能告诉我该怎么办吗?
我使用 django 1.9 和 python 3.6.
slugify
函数的 docstring 是:
Convert to ASCII if 'allow_unicode' is False. Convert spaces to hyphens. Remove characters that aren't alphanumerics, underscores, or hyphens. Convert to lowercase. Also strip leading and trailing whitespace.
因此您需要将 allow_unicode
标志设置为 True
以保留波斯语文本。
>>> text = 'سلام عزیزم! عزیزم سلام!'
>>> slugify(text)
''
>>> slugify(text, allow_unicode=True)
'سلام-عزیزم-عزیزم-سلام'
>>>
这个更好!!
slug = models.SlugField(max_length=20, unique=True, allow_unicode=True)
这里有一个您可以用于这种情况的示例:
先安装django_extensions
和pip
,如果没有安装
from django_extensions.db.fields import AutoSlugField
from django.utils.text import slugify
在 model.py 之前为您的 class 添加此功能:
def my_slugify_function(内容): return slugify(内容,allow_unicode=真)
在您的 class 中添加此字段:
slug = AutoSlugField(populate_from=['name'], unique=True, allow_unicode=True, slugify_function=my_slugify_function)
在url中必须使用这种格式:
re_path('person_list/(?P<slug>[-\w]+)/', views.detail, name='detail')