Django中的上下文渲染

2 投票
2 回答
1094 浏览
提问于 2025-04-20 17:20

我刚开始学习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并不是唯一的区别,在第二个输出中没有'字符。

这个区别和使用了两种不同的函数有关:reprstr——正如kroolik提到的,你可以在这里了解它们:输入和输出

摘自Python文档。

str()函数的目的是返回人类可读的值的表示,而repr()则是生成可以被解释器读取的表示(如果没有等效的语法,会强制产生语法错误)。对于那些没有特定人类可读表示的对象,str()会返回与repr()相同的值。

所以,这就是你看到'u'的原因,解释器需要知道一个字符串是否是unicode格式,这就是它的做法。

到这里你应该明白,Template.render函数使用了repr()函数,而print函数则没有。

撰写回答