如何从Django.utils.safestring.SafeTex公司

2024-10-01 13:36:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了一个django.utils.safestring.safettext在我的单元测试中:

ipdb> mail.outbox[0].body
u'Dear John Doe,<br>\n<p>\nYou have received a ..

ipdb> type(mail.outbox[0].body)
<class 'django.utils.safestring.SafeText'>

我想把上面的内容转换成一个字符串,这样我就可以去掉\n字符。。即我想使用rstrip()方法。。但我显然不能在django.utils.safestring.SafeText对象上这样做。思想?在


Tags: djangobrbodymailutils单元测试johndoe
3条回答

基于SafeText创建新字符串

str(mail.outbox[0].body)

你可以用django.utils.safestring.SafeText做你想做的事情反对。你几乎可以将每个方法作为字符串应用于SafeText对象。可用的方法有

'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'islower', 'isnumeric', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'

但它们将返回unicode对象。示例:-在

^{pr2}$

从Django 2.0.4开始,str(mail.outbox[0].body)不再工作,它返回相同的SafeText对象。(请参见this Django commit了解原因。)

相反,您可以添加一个空字符串来取回常规字符串:

type(mail.outbox[0].body + "") == str

为了防止它对其他人有帮助,我遇到了这个问题,因为我试图将一个安全文本从Django传递到pathlib.Path,这会抛出TypeError: can't intern SafeText。添加一个空字符串可以修复它。在

相关问题 更多 >