Python Jinja2 范围
Python Jinja2 For Range
我正在学习python/jinja2,我发现了一个我不知道如何解决的问题。我将一个数据列表传递给 Jinja,并使用该列表创建一个 table。这个 table 没问题,工作正常。但是当我想将此 list/table 的一个属性传递给表单时,它会丢失列表的引用并始终发送有关列表第一项的信息。让我更好地解释一下:
{% for value in listresult %}
<tr>
<td><center>{{ value.date }}</center></td>
{% set ident = value._id%}
<td>{{ident}}</td>
<td>
<form name="info_form" class="form-inline" action="/changetime1" method="post">
<div id="enquirypopup" class="modal fade in" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content row">
<div class="modal-header custom-modal-header">
<h4 class="modal-title">{{ident}}</h4>
</div>
</div>
</div>
</div>
</form>
<button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#enquirypopup">Change</button>
</td>
{% endfor %}
此时table的创建是正确的。在第 5 行中,它在 table(Different ID) 中打印每一行的一个 ID。但是当我要求打印同一个变量时,在第 14 行,它总是打印列表第一个元素的 "ident"。似乎当我调用一个表单时,它会丢失我们在列表中的元素的引用。
Result Table - Pop up
因此,无论我单击列表中的哪个元素(按钮 "Change" 第 20 行),弹出窗口中出现的 ID 始终是第一个元素。
有什么想法吗?
问题出在 HTML 元素 ID 上。由于您正在创建具有相同 ID (#enquirypopup
) 的每个表单,因此您的浏览器仅返回页面中的第一个元素,即它第一次看到 #enquirypopup
id*。
一个快速的解决方法是使用 jinja ident
变量设置 ID,如下所示:
<div id="enquirypopup_{{ ident }}" class="modal fade in" role="dialog">...</div>
和
<button type="button" class="btn..." data-toggle="modal" data-target="#enquirypopup_{{ ident }}">Change</button>
但是还有无数其他使用不同选择器的解决方案。
*这不是标准化行为,并且因浏览器而异,这是 bad practice
的另一个原因
我正在学习python/jinja2,我发现了一个我不知道如何解决的问题。我将一个数据列表传递给 Jinja,并使用该列表创建一个 table。这个 table 没问题,工作正常。但是当我想将此 list/table 的一个属性传递给表单时,它会丢失列表的引用并始终发送有关列表第一项的信息。让我更好地解释一下:
{% for value in listresult %}
<tr>
<td><center>{{ value.date }}</center></td>
{% set ident = value._id%}
<td>{{ident}}</td>
<td>
<form name="info_form" class="form-inline" action="/changetime1" method="post">
<div id="enquirypopup" class="modal fade in" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content row">
<div class="modal-header custom-modal-header">
<h4 class="modal-title">{{ident}}</h4>
</div>
</div>
</div>
</div>
</form>
<button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#enquirypopup">Change</button>
</td>
{% endfor %}
此时table的创建是正确的。在第 5 行中,它在 table(Different ID) 中打印每一行的一个 ID。但是当我要求打印同一个变量时,在第 14 行,它总是打印列表第一个元素的 "ident"。似乎当我调用一个表单时,它会丢失我们在列表中的元素的引用。
Result Table - Pop up
因此,无论我单击列表中的哪个元素(按钮 "Change" 第 20 行),弹出窗口中出现的 ID 始终是第一个元素。
有什么想法吗?
问题出在 HTML 元素 ID 上。由于您正在创建具有相同 ID (#enquirypopup
) 的每个表单,因此您的浏览器仅返回页面中的第一个元素,即它第一次看到 #enquirypopup
id*。
一个快速的解决方法是使用 jinja ident
变量设置 ID,如下所示:
<div id="enquirypopup_{{ ident }}" class="modal fade in" role="dialog">...</div>
和
<button type="button" class="btn..." data-toggle="modal" data-target="#enquirypopup_{{ ident }}">Change</button>
但是还有无数其他使用不同选择器的解决方案。
*这不是标准化行为,并且因浏览器而异,这是 bad practice
的另一个原因