python格式unicode / string方法的奇怪行为

时间:2013-12-12 18:14:45

标签: python django unicode django-templates python-unicode

我在模板中显示变量时遇到问题。我有一个使用此__unicode__方法的模型:

class MyClass(models.Model):

...

def __unicode__(self):
    return 'Admisión para {student}'.format(student=self.student.__unicode__())  # Look at that accented char (ó)

在models.py文件的顶部,我有这两行:

# coding=utf-8

from __future__ import unicode_literals

我正在使用python 2.7.3

应该显示我想要的模板是这样的:(只有三个有趣的行)

<td>{{obj}}</td>
<td>{{obj.status}}</td>
<td>{{obj.stage.datetime|date:"SHORT_DATE_FORMAT"}}</td>

obj是“MyClass”类型的对象。第二行和第三行显示了他们的预期,但第一行没有显示任何内容。我知道当一个人这样做({{obj}})时,所谓的方法是“ unicode ”,所以我尝试了很多东西:

我在控制台中尝试类似的东西:print obj。我没有任何问题。它按照我的预期显示。

我怀疑unicode方法引发了异常。所以我改变方法是这样的:

def __unicode__(self):
    try:
        txt = 'Admisión para {student}'.format(student=self.student.__unicode__())
    except Exception, e:
        txt = unicode(e)

    return txt

在更改之后,当渲染模板时,{{obj}}显示为“'ascii'编解码器无法解码位置25中的字节0xc3:序数不在范围内(128)”,所以我认为,它提出了例外。

但最令人奇怪的是,当我将 unicode 方法改为这样时:

def __unicode__(self):
    txt = self.student.__unicode__())
    return 'Admisión para {student}'.format(student=txt)

{{obj}}显示为我预期......

有人可以告诉我,我的错误在哪里?它是一个python / django模板错误?或者什么?

提前谢谢!!!

0 个答案:

没有答案