Django中英混合字符串的截取及表单中限制长度注意事项

本文介绍了Django在处理中英混合字符串时遇到的问题,如CharField的max_length对中文字符限制不足,以及truncatewords过滤器不支持中文。解决方案包括通过编码转换统计字节数进行表单验证,以及自定义模板过滤器来截取中英混合字符串。此外,还提供了一些相关阅读资源。
摘要由CSDN通过智能技术生成

中文字符和英文字符所占的字节长度是不一样,一个是2个字节,一个是1个字节,这给我们用英文的web框架开发中文app带来了麻烦。比如Django自带过滤器truncatewords并不支持截取中文,另外模型中CharField中的max_length选项用于限制中英混合字符串的长度基本上是失真的,需要额外自定义表单验证限制某些字段比如标题的长度。小编我今天就给大家分享几个例子和解决方案。

我们同样以博客的Article模型为例,我们试图限制标题的最大长度为90 个字符。

class Article(models.Model):
       """Article Model"""
   title = models.CharField('Title', max_length=90,db_index=True)

90个英文字符也就是10来个单词,作为标题长度刚好合适。如果中文标题允许长达90个中文字符,这将是个恐怖的存在,也就意味着这里标题的长度限制对于中文或中英混杂字符串等于形同虚设。注意: Django CharField的max_length是按字符数来限制的,而不是字节数。同样Django的length模板过滤器和python的len函数默认也是统计字符数,而不是字节数。

更好的解决方法?我们统计中英混合字符串的字节数,然后通过表单实现按字节数来限制,代码如下所示。我们先通过python的encode方法将混合字符串转化为二进制数据,再使用python的len方法统计字节长度。用该方法“我是a"会被统计成5,而不是3。该方法并不完美,但我们可以实现限制标题长度为90个英文

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值