-1

以下是 Django 中一个类的方法中的一行:

url = self.success_url % self.object.__dict__

然后我尝试了一个例子:

>>> "baby" % {"babe": "bebe"}
"baby"

这怎么可能有用?

4

4 回答 4

10

%在这种情况下被用于String Formatting。因为“baby”这个词没有%s,所以这个词根本没有被修饰。

在您的变量示例中urlself.success_url可能类似于"hello %s"并且self.object.__dict__可能是{"test": "three"}。很简单,这将打印:

hello {'test': 'three'}

请注意,如果您打算使用这样的东西,您应该使用.format()

>>> d = {'baby':'bebe'}
>>> "hello {[baby]}".format(d)
'hello bebe'
于 2013-06-28T10:52:19.597 回答
4

您可以像这样使用 Python字符串格式

print "%(foo)s is good" % {"foo": "bar"}

> bar is good
于 2013-06-28T10:53:26.280 回答
2

您的示例没用,但请尝试:

"Hello, my name is %(babe)s" % { 'babe' : 'bebe'}
于 2013-06-28T10:53:08.813 回答
2

url 可以使用任何对象实例属性:

class X(object):
    success_url = "http://goo.gl/%(x)s" 

    def __init__(self):
        self.x = 13

    def get_url(self):
        return self.success_url % self.object.__dict__

>>> X().get_url()
'http://goo.gl/13'

可以修改这些属性

>>>  x = X()
>>>  x.x = 174
>>>  X().get_url()
'http://goo.gl/174'

因此,当 url 取决于实例属性(在我的示例中)或实例object属性(在您的示例中)例如文档字段或 id 等时,这很有用。

于 2013-06-28T10:55:04.390 回答