在Jinja2中生成动态字符串

时间:2018-09-15 10:03:38

标签: jinja2

在jinja2中,我想生成枚举事物的字符串,在此示例中为不同的结果。我有以下模板文件。请注意,其中“ Fruit_str未设置”行是出于调试目的。

<!DOCTYPE HTML>
<html>
  <head>
    <meta charset="UTF-8">
  </head>
  <body>
    {% set fruit_str = "Fruit_str not set" %}
    {% for fruit in fruits %}
        {% if loop.first %}
            {% set fruit_str = fruit %}
        {% elif loop.last %}
            {% set fruit_str = fruit_str + " and " + fruit + "." %}
        {% else %}
            {% set fruit_str = fruit_str + ", " + fruit %}
        {% endif %}
    {% endfor %}
    You have {{fruit_str}}
  </body>
</html>

获取此JSON作为输入

{ "fruits" : ["apples", "oranges", "bananas", "pears"] }

预期输出为

 You have apples, oranges, bananas and pears.

但是,实际输出是

You have Fruit_str not set

这表明循环根本没有运行。 ´我已经阅读了有关循环(http://jinja.pocoo.org/docs/2.10/templates/)的jinja2文档,但是在此示例中找不到错误所在。怎么了?

1 个答案:

答案 0 :(得分:1)

在Jinja2中,"createdAt"=> 1537003313, 循环具有自己的名称空间;因此,您在循环内设置的变量是该循环的局部变量,一旦在循环外,同名变量将恢复为外部范围之一。

您可以使用(int)$model->createdAt;对象来解决此问题:

Transformations.switchMap(signInResponseMutableLiveData){signInResponse ->
            val mutableLiveData = MutableLiveData<Any>()

            if (signInResponse is FirebaseUser) {
                val firebaseUserEmail = signInResponse.email

                homeFragmentUIDataLiveData.value = HomeFragmentUIData(firebaseUserEmail ?: "")
            } else if (signInResponse is String) {
                loginErrorEventLiveData.value = signInResponse
            }

            mutableLiveData
        }

有关详细信息,请参见namespace的文档。