【问题标题】:Context Rendering in DjangoDjango 中的上下文渲染
【发布时间】:2014-11-03 05:39:37
【问题描述】:

我是 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 。

【问题讨论】:

    标签: python django django-templates render


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      补充 kroolik 答案:

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

      不同之处在于使用两个不同的函数:repr 和 str——正如 kroolik 指出的——你可以在这里阅读它们:Input and Output

      取自 Python 文档。

      str() 函数旨在返回 值的表示形式,这些表示形式相当易于人类阅读,而 repr() 旨在返回生成可以被解释器读取的表示(如果没有等效的语法,则会强制出现 SyntaxError)。对于没有特定表示供人类消费的对象,str() 将返回与 repr() 相同的值。

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

      此时您必须清楚该函数:Template.render 使用 repr() 函数,而 print 不使用。

      【讨论】:

        猜你喜欢
        • 2019-01-14
        • 2019-01-05
        • 2014-06-09
        • 1970-01-01
        • 2021-11-22
        • 1970-01-01
        • 2014-08-13
        • 2017-02-09
        • 1970-01-01
        相关资源
        最近更新 更多