Django admin 将 HTML 实体转换为它们的字符
Posted
技术标签:
【中文标题】Django admin 将 HTML 实体转换为它们的字符【英文标题】:Django admin converts HTML entities into their characters 【发布时间】:2013-08-04 02:24:40 【问题描述】:我在 Django Admin 站点上遇到了一个奇怪的问题,我将 html 片段存储在一个文本字段中。
点击保存后,字段变为:
这很好——HTML 无论如何都能正确呈现。真正的问题是当我再次点击保存时:
所有 HTML 实体都受此错误影响,包括  
。
为什么会这样?
操作系统:Amazon Linux x64 Python:2.6 Django:1.4 数据库:mysql 5.5
【问题讨论】:
你到底想做什么? 作为一个字符串,我希望其中的 HTML 实体保持不变。 你想要做的是如果你把这个→
留在→
而不是在右箭头?
是的。 (这是预期的行为,不是吗?)
你的提议是众所周知的,我理解。但是,这是THE Django Admin site 特有的问题,其源代码在部署后超出了我的控制范围。我在询问 Stack Overflow 我的设置的任何部分是否引入了这种行为,因为不知道这个错误存在于所有平台上。
【参考方案1】:
您的问题是 Django 将您的数据插入为unicode
,但您的 mysql 将其存储为latin_swedish
。
如果您不使用 South,只需使用 DROP DATABASE foo;
删除您的数据库。然后使用CREATE DATABASE foo CHARACTER SET UTF8;
重新创建它并再次运行syncdb
。
或者,您可以通过以下方式转换现有数据库:
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE tablename CHARACTER SET utf8 COLLATE utf8_general_ci;
但是您必须为每个表手动应用它。虽然我认为可以只将它应用于您遇到问题的表。
确保在执行此操作之前备份您的数据。
【讨论】:
试过了,我认为我们正朝着正确的方向前进,但这与预期的完全相反:现在每种实体都转换为它的角色。正确的解决方案包括不显示 HTML 实体作为它们的代表字符。 其实我觉得我可能大错特错了。选择你的数据库后,你能做SHOW TABLE STATUS
吗? Collation
行对您的表有何意义?
latin1_swedish_ci,可能默认...
数据库是关键任务,所以在我们尝试之前我们必须稍等片刻。如果有效,肯定会报告!
又改了答案以上是关于Django admin 将 HTML 实体转换为它们的字符的主要内容,如果未能解决你的问题,请参考以下文章