我正在尝试使用此宏,但没有将“ 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 %}
如果您有一个名为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>