Если по какой-либо причине вы не можете использовать существующую систему шаблонов, ваша проблема лучше всего решается с помощью регулярных выражений:
import re
valre = re.compile(r':\w+:')
def dosub(correspvals, correspfuns, lastditch):
def f(value):
v = value.group()[1:-1]
if v in correspvals:
return correspvals[v]
if v in correspfuns:
return correspfuns[v]() # or whatever args you need
# what if a value has neither a corresponding value to
# substitute, NOR a function to call? Whatever...:
return lastditch(v)
return f
replacer = dosub(adict, another, somefun)
thehtml = valre.sub(replacer, thehtml)
Как правило, вам потребуются два словаря (один сопоставляет значения с соответствующими значениями, другой сопоставляет значения с соответствующими вызываемыми функциями) и функцию, вызываемую в качестве последней попытки для значений, которые невозможно найти ни в одном из них толковый словарь; Приведенный выше код показывает вам, как соединить эти вещи (я использую замыкание, класс, конечно, будет так же хорошо) и как применить их для требуемой задачи замены.