Jinja2模板将变量评估为属性

时间:2018-01-24 11:38:14

标签: python-3.x jinja2 eval

我有一个Jinja2模板我正在为数据库编辑应用程序工作,而我正试图让它成为可扩展的' - 不是硬编码编辑页面,而是在表格中传递我想要的属性列表,并使用for循环迭代它们。它除了一件事之外 - 在硬编码版本中,我使用一个对象的属性来传递以查看该值是否已设置(它们都是布尔值),但我无法看到让jinja2采取“能力”#39;并将其用作“瞳孔”的属性。宾语;我会使用' eval'在Python中,但无法看到如何使其工作。这是代码的概念:

{%  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后端的当前设置,然后分别传递一个布尔列表,但这似乎增加了额外的复杂程度。

1 个答案:

答案 0 :(得分:2)

这是因为您传入字符串而不是属性。请改用getattr()。做getattr(pupil, capability)

之类的事情