2009-08-02 55 views
3

我使用這個REST Web服務,它返回不同的模板字符串作爲URL,例如:Python字符串templater

"http://api.app.com/{foo}" 

在Ruby中,我可以再使用

url = Addressable::Template.new("http://api.app.com/{foo}").expand('foo' => 'bar') 

得到

"http://api.app.com/bar" 

有什麼辦法可以在Python中做到這一點?我知道%()模板,但顯然他們不在這裏工作。

回答

4

在Python 2.6中,如果你需要的正是這樣的語法

from string import Formatter 
f = Formatter() 
f.format("http://api.app.com/{foo}", foo="bar") 

如果需要使用較早的Python版本,那麼你可以解析器/正則表達式複製2.6格式類或手卷你可以這樣做做到這一點。

0

我不能給你一個完美的解決方案,但你可以嘗試使用string.Template。 你要麼前處理傳入的URL,然後使用string.Template直接,就像

In [6]: url="http://api.app.com/{foo}" 
In [7]: up=string.Template(re.sub("{", "${", url)) 
In [8]: up.substitute({"foo":"bar"}) 
Out[8]: 'http://api.app.com/bar' 

採取默認的「$ {...}」語法更換標識的優勢。或者你繼承string.Template控制標識圖案,像

class MyTemplate(string.Template): 
    delimiter = ... 
    pattern = ... 

但我還沒有想通了這一點。