我正在使用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不为字符串串联提供操作员。
看来您的卷发括号太多了!尝试:
{{ select_lang('Ciao, ' + name.upper(),'Hello, ' + name.upper()) }}
您已经在{{...}}
语句中...