引用字符串中的jinja2变量

时间:2018-04-23 16:26:15

标签: jinja2

我使用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不提供字符串连接的运算符。

1 个答案:

答案 0 :(得分:1)

看来你的花括号太多了! 尝试:

{{ select_lang('Ciao, ' + name.upper(),'Hello, ' + name.upper()) }}

因为您已经在{{...}}声明中...