我正在为一个数据库编辑应用程序编写 Jinja2 模板,并尝试使它“可扩展” - 而不是硬编码编辑页面,我传递了一个属性列表以便在表格中显示,然后使用 for 循环来迭代它们。除了一个问题以外,它运行得很好 - 在硬编码版本中,我使用传递的对象的属性来查看该值是否已设置(它们都是布尔值),但我不知道如何让 jinja2 接受 'capability' 并将其作为 'pupil' 对象的属性使用;我本来会在 Python 中使用 'eval',但不知道如何让它工作。以下是代码示例:
{% for capability in capability_list %}
<tr>
<td>{{ capability }}</td>
<td>
{% if pupil.capability %}
<img src="{{request.static_url('gdpr_permissions:static/tick.png')}}" width="25">
{% else %}
<img src="{{request.static_url('gdpr_permissions:static/cross.png')}}" width="25">
{% endif %}
</td>
<td>
<div class="onoffswitch">
<input type="checkbox" name="{{ capability }}" class="onoffswitch-checkbox" value ='No' id="{{ capability }}" checked>
<label class="onoffswitch-label" for="{{ capability }}">
<span class="onoffswitch-inner"></span>
<span class="onoffswitch-switch"></span>
</label>
</div>
</td>
</tr>
{% endfor %}
问题出在这里:{% if pupil.capability %}
,我希望按照正在迭代的能力列表来改写它,比如改成pupil.web_access
和pupil.database_access
等。
你有什么想法可使这在jinja2上起作用或者采用其他方法来解决?另一个想法是迭代当前Python后台中的设置,然后分别传递布尔值列表,但这样似乎会增加额外的复杂性。
capability_list
中有什么内容?它们是 pupil 的属性吗? - E_K