我对编程很新。我正在尝试编写两个带有字符串的类方法,“{{name}}在{{course}}”中,并将{{name}}和{{course}}替换为各自的Key值。字典。所以:
t = Template()
vars = {
'name': 'Jane',
'course': 'CS 1410'
}
out = t.process('{{name}} is in {{course}}', vars)
print 'out is: [' + out + ']'
会打印:
Jane is in CS 1410
我的代码如下:
class Template:
def processVariable(self, template, data):
print template
assert(template.startswith('{{'))
start = template.find("{{")
end = template.find("}}")
out = template[start+2:end]
assert(out != None)
assert(out in data)
return data[out]
def process(self, template, data):
output = ""
check = True
while check == True:
start = template.find("{{")
end = template.find("}}")
output += template[:start]
output += self.processVariable(template[start:end+2], data)
template = template.replace(template[:end+2], "")
for i in template:
if i == "}}":
check = True
output += template
return output
t = Template()
vars = {
'name': 'Jane',
'course': 'CS 1410'
}
out = t.process('{{name}} is in {{course}}', vars)
print 'out is: [' + out + ']'
当我运行代码时,我得到以下输出:
{{name}}
{{course}}
Traceback (most recent call last):
File "C:some/filepath/name.py", line 46, in <module>
out = t.process('{{name}} is in {{course}}', vars)
File "C:some/filepath/name.py", line 28, in process
output += self.processVariable(template[start:end+2], data)
File "C:some/filepath/name.py", line 8, in processVariable
assert(template.startswith('{{'))
AssertionError
我只是不明白为什么即使模板为'{{course}}'我也会收到断言错误 编辑: 以这种方式制作代码的目的是引入任何字典和字符串,这样我就可以创建一个简单的社交网络。否则,更简单的方法将是熟练的。
答案 0 :(得分:1)
当template
为{{course}}
时,您实际上没有收到断言错误,如果您更改process
方法以包含一些简单的打印语句,您可以自己看到,例如:
def process(self, template, data):
# ...
output += template[:start]
print "Processing, template is currently:"
print template
output += self.processVariable(template[start:end+2], data)
# ...
return output
实际问题是check
永远不会变错。你可以用这样的东西替换你的if测试,然后你的函数运行良好:
if not '}}' in template:
check = False
答案 1 :(得分:1)
马吕斯打败了我对你问题的回答,但我只是想指出一个更简单的方法(几乎)做同样的事情。当然,如果你只是努力学习而不是艰难的方式通常会更好。
vars = {
'name': 'Jane',
'course': 'CS 1410'
}
out = '{name} is in {course}'.format(**vars)
print out