Django中的上下文渲染

时间:2014-09-09 17:39:01

标签: python django django-templates render

我是django的新手。所以当我在shell中练习django模板时,我看到了两个不同的“render()”输出。所以这就是它。

from django.template import Template,Context
t = Template("My name is {{name}}.")
c = Context("name":"sraban")
t.render(c)

所以当我点击进入shell时显示

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”是什么,为什么两个输出变化? 我在python 2.7.3中使用django1.6。

2 个答案:

答案 0 :(得分:0)

u表示字符串是unicode字符串。这称为string prefix。它在第一个示例中出现的原因是,在交互式shell中表示值的默认方式是使用函数repr在使用该值作为参数调用时返回的值。第二个示例是缺少前缀,因为print没有使用repr - 表示字符串,但是它们的实际值。

答案 1 :(得分:0)

补充kroolik回答:

如果你仔细观察,你会注意到u不是唯一的区别,在第二个输出中没有'个字符。

差异与使用两个不同的功能有关:reprstr - 正如kroolik指出的那样 - 你可以在这里阅读它们:Input and Output

取自Python Doc。

  

str()函数用于返回的表示,这些表示具有人类可读性,而 repr()表示生成可由解释器读取的表示(如果没有等效语法,则会强制执行SyntaxError)。对于没有特定人类消费表示的对象,str()将返回与repr()相同的值。

那么,这就是为什么你看到'u'解释器需要知道一个字符串是否是unicode的原因,以及它是这样做的。

此时,您必须明白功能:Template.render使用repr()功能而print没有。