转介到字符串内部的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不为字符串串联提供操作员。

看来您的卷发括号太多了!尝试:

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

您已经在{{...}}语句中...

最新更新