Django中的上下文渲染
我刚开始学习Django。在练习Django模板的时候,我在命令行中看到“render()”有两种不同的输出。下面是具体情况。
from django.template import Template,Context
t = Template("My name is {{name}}.")
c = Context("name":"sraban")
t.render(c)
当我在命令行中按下回车时,它显示了
u'My name is sraban'
但是当我写下
from django.template import Template,Context
t = Template("My name is {{name}}.")
c = Context("name":"sraban")
print t.render(c)
它的输出是
My name is sraban
我想知道第一个输出中的那个多出来的“u”是什么,为什么这两个输出会不一样??我使用的是Django 1.6和Python 2.7.3。
2 个回答
0
u
表示这个字符串是一个Unicode字符串。这个叫做字符串前缀
。在第一个例子中出现这个前缀,是因为在交互式命令行中,默认显示一个值的方式是使用函数repr
返回的结果。第二个例子没有这个前缀,是因为print
函数不会使用repr
的方式来显示字符串,而是直接显示它们的实际内容。
0
补充一下kroolik的回答:
如果你仔细看看,就会发现u并不是唯一的区别,在第二个输出中没有'字符。
这个区别和使用了两种不同的函数有关:repr
和str
——正如kroolik提到的,你可以在这里了解它们:输入和输出
摘自Python文档。
str()函数的目的是返回人类可读的值的表示,而repr()则是生成可以被解释器读取的表示(如果没有等效的语法,会强制产生语法错误)。对于那些没有特定人类可读表示的对象,str()会返回与repr()相同的值。
所以,这就是你看到'u'的原因,解释器需要知道一个字符串是否是unicode格式,这就是它的做法。
到这里你应该明白,Template.render
函数使用了repr()
函数,而print
函数则没有。