我想做类似的事情,仅限于在线上。我不能使用多行。
% if object.lang == 'fr_FR': 'Rappel de paimenet' % else: 'Payment reminder' %endif
我知道这不是很好的语法,但是我确实在文档中找到了我如何设法进行的?
欢呼
我认为您无法使用Mako做到这一点,至少不能以您想要的方式进行。
,只要没有文本之前,百分比就可以出现在线上的任何地方;
您可以做到这一点的一种方法是不要将if statement放在模板中。看来您正在尝试使用翻译,因此请在使用代码中进行翻译以馈送模板:
text = 'Rappel de paimenet' if object.lang == 'fr_FR' else 'Payment reminder'
# Now your template doesn't need to use an if-statement
template = Template("""Status: {{text}}""").render(text=text)
由于您正在将其用于翻译,因此我会考虑使用getText和babel。如果您在Web应用程序中使用了此信息,请查看任何特定于翻译的实用程序(例如Django-Babel或Blask-Babel)。
您可以在Pure Python中执行此操作。
var = {True: newValueIfTrue, False: newValueIfFalse}[condition]
将其包裹在模板中应该很容易。
我们需要使用" n&quort":
tmpl = "% if object.lang == 'fr_FR':n 'Rappel de paimenet'n % else:n 'Payment reminder'n % endif"
如果我们使用文件模板,我们需要扩展" n&quort"。正如本文和官方Mako文档中的Unicode章节所评论的那样,一个解决方案可能是:
t2 = Template(filename="test.tmpl", output_encoding='utf-8')
result = t2.render(object.lang="English").decode("unicode_escape")
print(result)
${object.lang == 'fr_FR' and 'Rappel de paimenet' or 'Payment reminder'}
,或者如果要将其扩展到更多语言,则以英语为默认语言:
${{'fr_FR': 'Rappel de paimenet', 'es_ES': ...}.get(object.lang, 'Payment reminder')}