Django 头痛与简单的非 ASCII 字符串

2023-11-26

我刚刚创建了以下模型:

class Categoria(models.Model):
    nombre=models.CharField(max_length=30)
    padre=models.ForeignKey('self', blank=True, null=True)

    def __unicode__(self):
        return self.nombre

然后注册到管理界面并syncdb'd

如果我只添加纯 ASCII 字符,一切都可以。但是如果我添加一个名为“á”(说些什么)的“类别”,我会得到:

Environment:

Request Method: GET
Request URL: http://192.168.2.103:8000/administracion/locales/categoria/
Django Version: 1.1.1
Python Version: 2.6.4
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.admin',
 'cruzandoelsuquiaDJ.locales']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware')


Template error:
In template /usr/lib/pymodules/python2.6/django/contrib/admin/templates/admin/change_list.html, error at line 78
   Caught an exception while rendering: ('ascii', '\xc3\xa1', 0, 1, 'ordinal not in range(128)')
   68 :         {% endif %}


   69 :       {% endblock %}


   70 :       


   71 :       <form action="" method="post"{% if cl.formset.is_multipart %} enctype="multipart/form-data"{% endif %}>


   72 :       {% if cl.formset %}


   73 :         {{ cl.formset.management_form }}


   74 :       {% endif %}


   75 : 


   76 :       {% block result_list %}


   77 :           {% if action_form and actions_on_top and cl.full_result_count %}{% admin_actions %}{% endif %}


   78 :            {% result_list cl %} 


   79 :           {% if action_form and actions_on_bottom and cl.full_result_count %}{% admin_actions %}{% endif %}


   80 :       {% endblock %}


   81 :       {% block pagination %}{% pagination cl %}{% endblock %}


   82 :       </form>


   83 :     </div>


   84 :   </div>


   85 : {% endblock %}


   86 : 

Traceback:
File "/usr/lib/pymodules/python2.6/django/core/handlers/base.py" in get_response
  92.                 response = callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/pymodules/python2.6/django/contrib/admin/options.py" in wrapper
  226.                 return self.admin_site.admin_view(view)(*args, **kwargs)
File "/usr/lib/pymodules/python2.6/django/views/decorators/cache.py" in _wrapped_view_func
  44.         response = view_func(request, *args, **kwargs)
File "/usr/lib/pymodules/python2.6/django/contrib/admin/sites.py" in inner
  186.             return view(request, *args, **kwargs)
File "/usr/lib/pymodules/python2.6/django/contrib/admin/options.py" in changelist_view
  986.         ], context, context_instance=context_instance)
File "/usr/lib/pymodules/python2.6/django/shortcuts/__init__.py" in render_to_response
  20.     return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/usr/lib/pymodules/python2.6/django/template/loader.py" in render_to_string
  108.     return t.render(context_instance)
File "/usr/lib/pymodules/python2.6/django/template/__init__.py" in render
  178.         return self.nodelist.render(context)
File "/usr/lib/pymodules/python2.6/django/template/__init__.py" in render
  779.                 bits.append(self.render_node(node, context))
File "/usr/lib/pymodules/python2.6/django/template/debug.py" in render_node
  71.             result = node.render(context)
File "/usr/lib/pymodules/python2.6/django/template/loader_tags.py" in render
  97.         return compiled_parent.render(context)
File "/usr/lib/pymodules/python2.6/django/template/__init__.py" in render
  178.         return self.nodelist.render(context)
File "/usr/lib/pymodules/python2.6/django/template/__init__.py" in render
  779.                 bits.append(self.render_node(node, context))
File "/usr/lib/pymodules/python2.6/django/template/debug.py" in render_node
  71.             result = node.render(context)
File "/usr/lib/pymodules/python2.6/django/template/loader_tags.py" in render
  97.         return compiled_parent.render(context)
File "/usr/lib/pymodules/python2.6/django/template/__init__.py" in render
  178.         return self.nodelist.render(context)
File "/usr/lib/pymodules/python2.6/django/template/__init__.py" in render
  779.                 bits.append(self.render_node(node, context))
File "/usr/lib/pymodules/python2.6/django/template/debug.py" in render_node
  71.             result = node.render(context)
File "/usr/lib/pymodules/python2.6/django/template/loader_tags.py" in render
  24.         result = self.nodelist.render(context)
File "/usr/lib/pymodules/python2.6/django/template/__init__.py" in render
  779.                 bits.append(self.render_node(node, context))
File "/usr/lib/pymodules/python2.6/django/template/debug.py" in render_node
  71.             result = node.render(context)
File "/usr/lib/pymodules/python2.6/django/template/loader_tags.py" in render
  24.         result = self.nodelist.render(context)
File "/usr/lib/pymodules/python2.6/django/template/__init__.py" in render
  779.                 bits.append(self.render_node(node, context))
File "/usr/lib/pymodules/python2.6/django/template/debug.py" in render_node
  81.             raise wrapped

Exception Type: TemplateSyntaxError at /administracion/locales/categoria/
Exception Value: Caught an exception while rendering: ('ascii', '\xc3\xa1', 0, 1, 'ordinal not in range(128)')

我的 django 版本是 1.1,数据库是 5.1.37-1ubuntu5,使用 utf8 字符集,表使用 utf8_bin 排序规则。

这个问题似乎太基本了,不可能是真的,而且我是 django 新手,所以如果我错过了一些非常简单的东西,我提前表示抱歉:)


Django 通常具有非常好的 Unicode 支持(请参阅Django 1.1“Unicode 数据”文档了解详情)。在我的代码中,我发现,如果我在简单的 Unicode 功能方面遇到问题,问题通常是我没有很好地理解 Django 的细节,而不是 Django 在其 Unicode 支持方面有错误。

“Unicode 数据”页面告诉我们“Django 的所有数据库后端...自动将从数据库检索到的字符串转换为 Python Unicode 字符串。您甚至不需要告诉 Django 您的数据库使用什么编码:这是透明处理的。 ”所以你的简单return self.nombre应该返回一个 Python Unicode 字符串。

但是,那Django 1.1“数据库”页面有一个关于 MySQL 后端如何处理的重要说明utf8_bin整理:

...如果你真的想要区分大小写 特定列的比较或 表,您可以更改列或 表使用 utf8_bin 排序规则。 这里面主要要注意的一点是 情况是,如果您使用 MySQLdb 1.2.2,Django 中的数据库后端将返回字节串(而不是 unicode 字符串)对于任何字符 它返回的字段接收自 数据库。这是一个很强的变异 从Django的正常做法来看 总是返回 unicode 字符串。它 由您(开发人员)来处理 您将收到的事实 字节串如果你配置你的 使用 utf8_bin 排序规则的表。 Django 本身应该可以顺利运行 有这样的列,但是如果你的代码 必须准备好打电话 django.utils.encoding.smart_unicode() 有时如果它真的想工作 具有一致的数据...

因此,在您的原始示例中,“nombre”列使用 utf8_bin 排序规则。这意味着self.nombre返回一个 Python 字节字符串。当您将其放入需要 Python Unicode 字符串的表达式中时,Python 会执行其默认转换。这相当于self.nombre.decode('ascii')。而且当然,.decode('ascii')当遇到 0x7F 以上的任何字节时失败,例如编码“á”的 UTF-8 字节。

您发现了解决此问题的两种方法。第一个是转换返回的Python字节字符串self.nombre显式转换为 Python Unicode 字符串。我敢打赌以下更简单的代码会起作用:

return self.nombre.decode('utf8')

第二种方法是更改​​“nombre”列的 MySQL 排序规则,这会导致 Django 的 MySQL 后端返回 Python Unicode 字符串,而不是不常见的字节字符串。然后你的原始表达式给出一个 Python Unicode 字符串:

return self.nombre

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 头痛与简单的非 ASCII 字符串 的相关文章

  • 看起来像 iOS7 向左导航 V 形的 Unicode 字符

    最接近 iOS7 向后指向导航栏 V 形的大小 与大写字母一样大或大于大写字母 和形状的 Unicode 字符是什么 我正在寻找一种使用 unicode 字符来模拟通常没有 返回 导航的视图的 向后导航 V 形的方法 常规的 对于锐角比 U
  • Django 管理 GenericForeignKey 小部件

    我正在创建一个 Django 应用程序 其中所有模型都可以按照用户设置的顺序相互关联 我正在使用 GenericForeignKeys 设置所有这些 更重要的是 我需要能够支持这些类型的关系 管理的多个集合 因此 一个对象可以拥有多个相关对
  • pyPDF通过django合并并显示为httpresponse

    我在合并 pyPDF 逻辑以将两个 pdf 文件合并到我的 django 站点时遇到问题 我编写了在本地服务器上的 python 文件中运行时用于合并文件的代码 但我需要明确识别要合并的文件 from pyPdf import PdfFil
  • 浏览器对 Unicode 的支持

    我正在使用有图标但没有图像的 CSS 按钮 http www paulund co uk css buttons with icons but no images 图标是使用 unicode 值生成的 在此我遇到了一些浏览器不支持某些 un
  • UTF-8 在 Python 日志记录中,如何?

    我正在尝试使用 Python 的日志记录包将 UTF 8 编码的字符串记录到文件中 作为一个玩具示例 import logging def logging test handler logging FileHandler home ted
  • 解析 HTTP 标头值:引用、RFC 5987、MIME 等

    让我困惑的是 HTTP 标头的解码values 示例标头 Some Header quoted string utf 8 en Weirdness 罐头value s被引用 a 的编码怎么样 本身 是 有效的引号字符 分号有什么意义 HTT
  • 使用 perl 比较两个 Unicode 字符串

    当我运行以下代码时 它不会进入 在此处执行某些操作 部分 my a P 3 lt 1 my b P 3 lt 1 if a ne b do something here 还有另一种方法可以将 Unicode 字符串与 perl 进行比较吗
  • NSAttributedString 和表情符号:位置和长度问题

    我正在使用 NSAttributedString 对来自 API 的文本的某些部分 如 Twitter 上的 mention 进行着色 API 为我提供了文本和代表文本中应着色的部分 或链接 标签等 的实体数组 但有时 颜色会因为表情符号而
  • 如何使用 Unicode 十六进制值 (UTF-16) 在 Swift 中表达字符串

    我想在 Swift 中使用十六进制值编写 Unicode 字符串 我已阅读文档 https developer apple com library prerelease ios documentation Swift Conceptual
  • ASCIIEncoding.ASCII.GetBytes() 返回意外值

    这段 C 代码 string s u00C0 byte bytes ASCIIEncoding ASCII GetBytes s Trace WriteLine BitConverter ToString bytes 产生以下输出 3F 为
  • 在子管理中显示父字段(list_display)

    这是 models py 的片段 class Applicant models Model name models CharField email models CharField class Application models Mode
  • 如何从 Django 管理员触发 Celery 任务?

    我有一个模型叫Publication我想在 Django Admin 的列表视图中添加一个按钮 以允许触发 Celery 任务 admin py from django contrib import admin from models im
  • CSV、Python:正确使用 DictWriter(ValueError:dict 包含不在字段名中的字段)

    我在掌握 csv 模块 Python 2 7 中的 DictWriter 时遇到困难 我有这个 哦 我正在使用 unicodecsv 库 因为我读到存在问题 f object instance return a dictionary key
  • 为缺少字体的 Web 浏览器降低 Unicode 字符的质量

    我在 html 文档中使用 Unicode 检查标记 U 2713 我发现它在大多数浏览器中都可以正常显示 但偶尔我会遇到有人的电脑上缺少字体 如果字体丢失 是否有 HTML JS 技巧来指定替代显示字符 或图像 没有直接的方法可以判断任何
  • git diff 在尖括号中显示 unicode 符号

    我有一个带有 unicode 符号 俄语文本 的文件 当我修复一些拼写错误时 我使用git diff color words 看看我所做的改变 如果是 unicode 西里尔文 符号 尖括号会造成一些混乱 如下所示 cat p1 cat p
  • raku 可以避免这个 Malformed UTF-8 错误吗?

    当我运行这个 raku 脚本时 my proc run tree du out proc out slurp close say 我在 MacOS 上遇到此错误 Malformed UTF 8 near bytes ef b9 5c 而不是
  • sys.maxunicode 是什么意思?

    CPython 根据编译选项在内部将 unicode 字符串存储为 utf 16 或 utf 32 在 utf 16 版本中 Python 字符串切片 迭代和len似乎适用于代码单元 而不是代码点 因此多字节字符的行为很奇怪 例如 在 CP
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • CharInSet 不适用于非英文字母?

    我已经将应用程序从 Delphi 2007 更新到 Delphi 2010 一切都很顺利 除了一条编译正常但不起作用的语句 If Edit1 Text 1 in S then ShowMessage Found else ShowMessa
  • 在 PowerShell 中显示 Unicode 表情符号

    我想在 PowerShell 中显示像 U 1F4A9 这样的 Unicode 表情符号 我知道这仅在 ISE 控制台内有效 但我不知道如何操作 到目前为止我尝试过的 CharBytes System Text Encoding Unico

随机推荐

  • 从静态库创建共享库时保留所有导出的符号

    我正在从静态库创建一个共享库 但我没有源代码 许多 Stack Overflow 问题都提供了answers关于如何做到这一点 gcc shared o libxxx so Wl whole archive libxxx a Wl no w
  • AngularJS 页面之间传递数据 + 页面刷新

    我试图在应用程序的结账过程中在页面之间传递数据 但它没有按应有的方式工作 我已经阅读了一些内容 大多数人建议使用服务 但唯一的问题是 当刷新页面时 用户单击刷新或稍后返回 服务中的所有数据都会消失 这是有道理的 因为服务中的数据并不意味着是
  • Java / 将 ISO-8601 (2010-12-16T13:33:50.513852Z) 转换为 Date 对象

    如何解析一个字符串ISO 8601格式与祖鲁时间 javax xml bind DatatypeConverter parseDateTime 2010 12 16T13 33 50 513852Z returns IllegalArgum
  • LibGDX 中 music.class 的 TweenAccessor

    我一直想知道 是否可以使用 LibGDX 中的通用 Tween 引擎来 例如 更改歌曲的音量 我用类似于我的 SpriteAccessor 的代码编写了自己的 MusicAccessor 它实际上适用于 Sprite class 但当涉及到
  • 在 PyCharm 中运行时,Tkinter 窗口显示为黑色

    无论我如何指定背景颜色 Tkinter 背景在运行脚本上都显示为黑色 我在 macOS 12 2 1 上使用 PyCharm CE 2021 3 2 Python解释器 Python 3 8 有5个包 如下 枕头9 0 1 未来0 18 2
  • sprintf() 如何防止 SQL 注入?

    我听说过sprintf 防止 SQL 注入 这是真的吗 如果是这样 怎么办 为什么人们建议这样编写查询 sql sprintf SELECT FROM TABLE WHERE COL1 s AND COL2 s col1 col2 spri
  • 圆线交点

    public static ArrayList
  • 如何从网页确定主机安装的 ASP.NET 版本

    我有一个在 Windows 共享托管环境中运行的网站 在他们的共享主机帐户控制面板中 我将其设置为使用 ASP NET 版本 3 0 但没有具体说明 3 5 SP1 如何查看在 asp net 页面托管我的网站的服务器上运行的已安装版本 T
  • PyMySQL 和 OrderedDict

    我已经使用 PyMySQL 一段时间了 并创建了自己的包装器 我习惯于速记编写查询 尽管如此 我一直在使用 OrderedDict 创建 CSV 文件 因为我需要保持顺序相同 但我意识到 如果我使用 PyMySQL 查询数据库 我将无法获得
  • 将值推送到 Laravel 中现有的缓存值

    我想为现有缓存设置一个值 我有这样的事情 Cache put key foo bar expiresAt 现在我该如何推动 sad 值到这个键而不删除最后的值 在推送值并获取缓存后需要类似的东西 foo bar sad 请尝试以下操作 Ca
  • MySQL 中的基数是什么?

    MySQL 中的基数是什么 请用简单的 非技术性的语言进行解释 如果任何表的索引详细信息显示字段的基数group id为11 那么这意味着什么呢 最大基数 所有值都是唯一的 最小基数 所有值都相同 有些列被称为高基数列 因为它们有约束 例如
  • Python:覆盖 __new__ 中的 __init__ 参数

    我有一个 new 方法如下 class MyClass object def new cls args new args args sort prev args pop 0 while args next args pop 0 if pre
  • 在反应中下载文件

    我有一个使用 Laravel 创建的 Restful API 该 API 如下所示 http 127 0 0 1 8000 api file pdf id 这是我的下载代码 public function pdfDownload id pd
  • “日期”的默认值无效

    我想将日期设置为mysql中日期的默认值 不是时间戳 但出现以下错误 ALTER TABLE RMS transactionentry CHANGE Date Date DATE DEFAULT NOW NOT NULL Error Inv
  • 如何保持响应图像相同的高度?

    我正在制作一个网页 其中有一排并排有封面照片和个人资料图片 我将它们都放在不同大小网格的引导行中 但是 个人资料图片总是低于封面照片 它的高度更大 如何让它们保持响应 但高度相同 我的最终目标是让它们看起来像一条带 之间有填充 然后当窗口大
  • 每次运行硒测试时如何增加字段值?

    每次通过 Selenium IDE 运行 Selenium 测试时 是否有任何简单的方法可以将字段值增加 1 Command Type Target some kind of id Value number 1 EDIT 1 感谢克罗森沃尔
  • 通过 server.execute 传递参数?

    可以通过传递参数server execute 外汇 我在我的site asp我需要的 IF 场景functions asp a something id 123被执行 这可能吗 在 site asp 上 dim id id 123 if b
  • 命令“npm start”不执行任何操作

    进入后npm start在我的 Node 项目的目录中 我看到旋转的管道符号 表明 npm 正在加载 然而 该图形会无限期地显示 并且什么也不会发生 没有提供错误消息 我该如何解决或至少诊断这个问题 My 包 json如下 name Pro
  • HTML5 和 Amazon S3 分段上传

    是否可以使用 HTML 5 File API 例如 这个库 https github com 23 resumable js 与 S3 分段上传功能结合使用 http docs aws amazon com AmazonS3 latest
  • Django 头痛与简单的非 ASCII 字符串

    我刚刚创建了以下模型 class Categoria models Model nombre models CharField max length 30 padre models ForeignKey self blank True nu