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

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

【问题讨论】:

    标签: python django 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?
    • “英文”字符,不是英文
    猜你喜欢
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 2020-09-07
    • 1970-01-01
    • 2021-11-20
    • 2020-09-27
    • 1970-01-01
    相关资源
    最近更新 更多