我使用jinja2模板语言来创建双语文档。为此,我创建了一个名为select_lang的宏,它将两个字符串作为参数,主要语言和辅助语言中的文本,并以格式返回
<text in primary language> / <i><text in secondary language></i>
有时,作为输入,我想使用jinja2变量,这就是我努力的地方。给出以下代码:
<!DOCTYPE HTML>
{% set bilingual = primary_lang and secondary_lang %}
{% from 'templates/partials/macro_select_lang.j2.html' import select_lang with context %}
<html>
<body>
{{ select_lang('Testo in italiano','Text in English') }}<br>
{{name.upper()}}<br>
{{ select_lang('Ciao, {{name.upper()}}','Hello, {{name.upper()}}') }}
</body>
</html>
我得到了这个输出:
Testo in italiano / *Text in English*
JANE DOE
Ciao, {{name.upper()}} / Hello, {{name.upper()}}
但是期望的结果是在传递给select_lang宏之前评估了{{name.upper()}}。
我搜索过jinja2文档,但找不到任何相关主题。
注意:有人可能认为这是一个愚蠢的宏,可以用一些简单的html代码替换。在这个例子中也是如此,但在实际的应用程序中它做了很多,所以替换宏并不能解决问题;我需要在传递之前评估表达式。
在常规编程语言中,我会编写类似
的内容{{ select_lang('Ciao, ' + {{name.upper()}},'Hello, ' + {{name.upper()}}) }}
但这不起作用,我认为jinja2不提供字符串连接的运算符。
答案 0 :(得分:1)
看来你的花括号太多了! 尝试:
{{ select_lang('Ciao, ' + name.upper(),'Hello, ' + name.upper()) }}
因为您已经在{{...}}
声明中...