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

2024-10-05 14:30:14 发布

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

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

class MyClass(models.Model):

...

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

在我的头顶上模型.py文件,我有两行:

^{pr2}$

我使用的是python2.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'codec cannot decode byte 0xc3 in position 25:ordinal not in range(128)”,因此正如我所想的,它引发了一个异常。在

但最奇怪的是,当我将unicode方法改为如下所示:

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

{{obj}}如我所料显示。。。在

有人能告诉我我的错误在哪里吗?是python/django模板错误吗?或者什么?在

提前谢谢你!!!在


Tags: 方法模型selftxt模板objformatreturn