如何从非英语值创建一个 slug?

Posted

技术标签:

【中文标题】如何从非英语值创建一个 slug?【英文标题】:How to create a slug from non-English values? 【发布时间】:2021-12-14 07:09:00 【问题描述】:

我的模型 Author 带有字段 firstname, lastname。我想添加另一个字段 'slug' 这将包含一个字段串联的块。但是,这些字段包含非英文字符,我需要一个英文 slug 来创建链接模板 "localhost/authors/str::slug" 如何实现?

【问题讨论】:

【参考方案1】:

要解决此问题,您可以使用unidecodeslugify。 你应该通过pip install unidecode安装它

from unidecode import unidecode
from django.template import defaultfilters
slug = defaultfilters.slugify(unidecode(input_text))

示例:

import unidecode
a = unidecode.unidecode('привет')
the answer will be ('privet') #this is just an example in russian.
and after that you can apply slugify

【讨论】:

它可以使用空格吗?比如“John Streleki” @lhor 是的,但你必须在使用完unidecode后申请slugify 是的,但是当我尝试显示 self.slug, slug = defaultfilters.slugify(unidecode(f"firstname lastname")) 时它会返回这个“djangodbmodelsfieldscharfield-djangodbmodelsfieldscharfield” @lhor 创建一个聊天室,我会帮助你。你没有以正确的方式使用它。 我的声望不够【参考方案2】:

您可以先使用trans 将名称转换为拉丁字符。

pip install trans

from trans import trans
from django.utils.text import slugify

author_slug = slugify( trans(first_name + " " + last_name) )

或者如果你不介意这样的字符:%20, %C3,你可以使用

from urllib.parse import quote
author_slug = slugify( quote(first_name + " " + last_name) )

【讨论】:

据我了解,trans'会将我的字符串 f"firstname lastname" 翻译成英文,然后 slugify 会返回一个 slug? “英文”字符,不是英文

以上是关于如何从非英语值创建一个 slug?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 tm 包从非英语语料库中删除常用词尾?

如何从非 ascii 字符中获取 char 值

从非均匀数据创建均匀分布的示例

如何访问我的网址中的slug值?

如何创建 URL slug 扩展?

如果与提供的 id 匹配,如何从对象数组中获取 slug 值?