Jinja宏不会渲染字符串+变量

问题描述 投票:0回答:1

我正在尝试使用此宏,但没有将“ Dear user_name”呈现给宏,但是如果我仅传递变量,它将起作用。为什么会这样?

layout.hmtl

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>

 <div>
        {% block content %}{% endblock content %}
 </div>
</body>
</html>

macro.html

    {% macro paragraph(text="") %}
        <p>{{ text }}</p>
    {% endmacro %}

content.html

   {% extends 'layout.html' %}
   {% from 'macros/macro.html' import paragraph %}

   {% block content %}
     {{ paragraph(text="Dear user_name,") }}
   {% endblock %}
flask jinja2
1个回答
1
投票

如果您有一个名为user_name的变量,并且想在模板中使用该变量,则需要将user_name移至文字字符串之外。代替:

 {{ paragraph(text="Dear user_name,") }}

您将使用:

 {{ paragraph(text="Dear " ~ user_name ~ ",") }}

或:

 {{ paragraph(text="Dear {},".format(user_name)) }}

使用以上两个示例之一,此代码:

import jinja2

e = jinja2.Environment(loader=jinja2.FileSystemLoader('templates'))
t = e.get_template('content.html')
print(t.render(user_name='alice'))

与模板一起使用时,将产生以下输出:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>

 <div>


    <p>Dear alice,</p>


 </div>
</body>
</html>

© www.soinside.com 2019 - 2024. All rights reserved.