在 django 模板中显示 ASCII 字符(python 2)

Posted

技术标签:

【中文标题】在 django 模板中显示 ASCII 字符(python 2)【英文标题】:Show ASCII characters in django template (python 2) 【发布时间】:2016-08-01 10:27:23 【问题描述】:

我试图在模板中显示单词“Año”,但我得到一个空字符串。

我有

# -*- coding: utf-8 -*-

在我的views.py开头

在我看来我已经尝试过了:

 unicode(myString)

 myString.encode(encoding='UTF-8')

我已经在我的模板中尝试过:

 n.name|safe

这些方法都不适合我。

在我的 mysql 表中,这个词很好。

在我看来,我得到这样的数据:

cursorMYSQL.execute(query)
table_names = cursorMYSQL.fetchall()

在我的模板中:

%if table_names%
    % for n in table_names %
        <option value="n.name" name="n.name">n.name</option>
    % endfor %
%endif%

【问题讨论】:

django 在显示 unicode 方面没有问题,问题可能与您在上下文中传递 n 的方式有关,您应该在视图中展示您是如何做到的 请注意,# -*- coding: utf-8 -*- 只是告诉 Python 解析器脚本源的编码使用 UTF-8,这使它能够正确解释脚本本身中的 UTF-8 字符串文字。它对脚本处理 Unicode 的方式没有影响。您可能会发现这篇文章很有帮助:Pragmatic Unicode,由 SO 资深人士 Ned Batchelder 撰写。 只是一个问题:为什么直接从 SQL 游标中获取 Django 中的数据?你不使用 ORM? @KlausD。是的,那是另一个故事,长话短说,我被要求这样做,仅此而已。 通过使用unicode() 函数,我假设您使用的是 Python 2。您应该始终在 Unicode 问题中提及 Python 版本(最好通过适当的标签) , 因为 Unicode 处理在 Python 2 和 Python 3 之间是完全不同的。 【参考方案1】:

最后我用

解决了
myString.decode('latin1')

正如 Joel Goldstick 所说,我必须检查我的数据库,因为有些表是用 utf-8 编码的,有些是用 latin1 编码的,我不知道。

将我的 mysql 表字符集更改为 CHARSET=utf8mb4 也不起作用。

【讨论】:

以上是关于在 django 模板中显示 ASCII 字符(python 2)的主要内容,如果未能解决你的问题,请参考以下文章

Django % include % 标签显示硬编码字符串但不可变

在 Django 模板中仅显示正文的第一段

想在 django 模板中显示姓氏的第一个字符

如何过滤django模板中的特殊字符

如何通过将字符串格式化为 django 模板来显示数据?

(GAE 和 django) 模板过滤和时间格式显示