mako,在一行中使用if / else控制结构



我想做类似的事情,仅限于在线上。我不能使用多行。

% 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')}

最新更新