Django不使用replace方法如何还原slugify生成的slug文本
Django slug反向还原问题解答
问题对应的示例代码如下:
from django.utils.text import slugify urlparameter = slugify("This is my First trip") # 运行结果: this-is-my-first-trip
结论
Django 没有提供原生内置的专用方法来实现slug到空格分隔普通文本的反向还原。
具体说明
- Django的
slugify本身是单向有损转换工具,设计目标是生成适合URL路径的安全字符串,转换过程除了把空格替换为连字符,还会自动将所有字符转为小写、剥离重音标记、删除所有非字母数字/非连字符/非下划线的特殊字符、清理连续分隔符,整个过程会丢失原始文本的大小写、特殊符号、非ASCII内容(默认配置下)等信息,不存在通用的无损还原逻辑,因此官方从设计层面就没有提供配对的反解方法。 - 实际开发中几乎不需要反解slug:slug一般作为内容(文章、商品、行程等)的URL索引字段,和原始标题、正文等字段一同持久化存储在数据库中,需要展示原始文本时直接查询对应数据记录取原始字段即可,完全不需要从slug反向推导内容。
- 针对你给出的极简示例场景,如果只是要把连字符分隔的小写slug转为空格分隔的文本,且要求不能直接用
replace("-", " ")做替换,Django也没有封装对应的内置工具,可以直接用Python原生字符串方法实现,参考代码如下:
slug = "this-is-my-first-trip" plain_text = ' '.join(slug.split('-')) # 运行结果: this is my first trip
该方法仅能实现分隔符的替换,无法还原原始文本的大小写、被slugify移除的特殊字符等内容,不属于通用反解方案,只适用于和示例完全一致的简单场景。
内容的提问来源于stack exchange,提问作者Verma
相关产品推荐
相关产品推荐

