好的,所以我试图显示一个包含用户/角色的简单表格。
我有一个角色名称列表,用户定义为...
[{
'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
似乎很脆弱,并且将来可能会中断。