Jinja2 模板将变量评估为属性



我有一个 Jinja2 模板,我正在为数据库编辑应用程序工作,我正在尝试使其"可扩展" - 而不是硬编码编辑页面,我传递一个我想要的属性列表在表中,并使用 for 循环迭代它们。 它除了一件事之外工作 - 在硬编码版本中,我使用正在传递的对象的属性来查看是否已设置该值(它们都是布尔值),但我看不出如何让 jinja2 获取"能力"并将其用作"瞳孔"对象的属性;我会在 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_accesspupil.database_access等,遵循正在迭代的功能列表。

关于如何使其与 jinja2 一起工作的任何想法,或者如何解决它? 我的另一个想法是迭代 python 后端中的当前设置,然后单独传递布尔值列表,但这似乎增加了额外的复杂性。

这是因为您传入的是字符串而不是属性。请改用getattr()。做一些类似getattr(pupil, capability)的事情

最新更新