0

好的,所以我试图显示一个包含用户/角色的简单表格。

我有一个角色名称列表,用户定义为...

[{
    'Username': 'Bob',
    'Roles': ['Admin']
},
{
    'Username': 'Sheila',
    'Roles': ['Admin', 'Manager']
}]

我想要制作的是这样的东西......

Username     Manager    Admin    SomeRoleNobodyHas
Bob          No         Yes      No
Sheila       Yes        Yes      No

我正在使用此上下文渲染视图

Data = {'Roles': ['Admin', 'Manager', 'SomeRoleNobodyHas'],
        'Users': Users}

我认为这将是微不足道的(以前从未接触过模板引擎,我通常返回 Json)。输出列标题很容易,所以跳到 tbody...

首先我试过...

{% for User in Users%}
    <td>{{User.Username}} ({{User.Id}}) </td>
    {% for Role in Roles%}
        <td>{%if Role in User.Roles%}Y{%else%}N{%endif%}</td>
{% endfor %}
{% endfor %}

但这给了我一个语法错误。由于这个答案暗示我试图在 html 中做太多事情,所以我修改了我的上下文以添加

       'UserTable': [
                     {'Id': x['Id'],
                      'Username': x['Username'],
                      'EmailAddress': x['Email'],
                      'IsLocked': x['IsLocked'],
                      'Roles': dict(zip(Roles, [y in x['Roles'] for y in Roles]))
                      } for x in Users]

所以现在我应该有一个User['Roles'][RoleName]保证存在并且是真或假的。然后我迭代UserTable而不是Users

不幸的是,当键来自另一个迭代器时,我无法弄清楚如何从字典中查找值......

{% for Role in Roles%}
    <td>{{Role}}: {%if User.Roles.Role == True%}Y{%else%}N{%endif%}</td>
{% endfor %}

这总是评估为假(我相信它User['Roles']['Role']没有User['Roles'][Current value of {{Role}}])(是的,我已经诉诸尝试明确== True它没有帮助)。

也许有一种疯狂的方法,但我想要完成的显然是表示逻辑 - 在我看来这意味着它应该在模板中是可能的?

我怎样才能真正让它工作?

注意:我确实设法通过将角色设置为布尔列表并假设 和 的顺序保持不变来使其工作,Roles但这User.Roles似乎很脆弱,并且将来可能会中断。

4

1 回答 1

0

简而言之,您无法User['Roles'][Role]在 django 模板中以这种方式查找。但是,以下代码应生成您在问题中提到的表:

使用此上下文:

all_roles = set(role for role in user['Roles'] for user in Users)
cx ={
  'AllRoles': list(all_roles),
  'Users': Users,
}

您可以像这样在模板中制作表格:

<table>
  <tr>
    <th>Username</th>
    {% for role in AllRoles %}
      <th>{{ role }}</th>
    {% endfor %}
  </tr>
  {% for user in UserTable %}
    <tr>
      <td>{{ user.Username }}</td>
      {% for role in AllRoles %}
        <th>{% if role in user.Roles %}Yes{% else %}No{% endif %}</th>
      {% endfor %}
    </tr>
  {% endfor %}
</table>
于 2013-05-30T13:41:45.153 回答