Python 如何在django';什么是模板引擎?

Python 如何在django';什么是模板引擎?,python,django,django-templates,Python,Django,Django Templates,好的,我试着展示一个包含用户/角色的简单表 我有一个角色名列表,用户的定义类似于 [{ 'Username': 'Bob', 'Roles': ['Admin'] }, { 'Username': 'Sheila', 'Roles': ['Admin', 'Manager'] }] 我想制作的是这样的东西 Username Manager Admin SomeRoleNobodyHas Bob No Yes

好的,我试着展示一个包含用户/角色的简单表

我有一个角色名列表,用户的定义类似于

[{
    '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 %}
所以现在我应该有一个
用户['Roles'][RoleName]
,它保证存在,并且是真的还是假的。然后我迭代了
UserTable
,而不是
Users

不幸的是,当键来自另一个迭代器时,我无法解决如何从dict中查找值

{% for Role in Roles%}
    <td>{{Role}}: {%if User.Roles.Role == True%}Y{%else%}N{%endif%}</td>
{% endfor %}
{%用于角色中的角色%}
{{Role}}:{%if User.Roles.Role==True%}Y{%else%}N{%endif%}
{%endfor%}
它的计算结果总是错误的(我相信它是在做
User['Roles']['Role']
而不是
User['Roles'][{{Role}}}的当前值]
)(是的,我尝试了显式的
==True
它没有帮助)

也许有一种方法可以解决这种疯狂,但我试图实现的是清晰的呈现逻辑——在我看来,这意味着在模板中应该是可能的

我怎样才能让它真正起作用


注意:我确实通过将角色设置为布尔列表并假设
角色
用户的顺序来实现它。角色
是常量,但这看起来很脆弱,将来可能会中断。

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

在这种情况下:

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>

用户名
{AllRoles%中角色的%s}
{{role}}
{%endfor%}
{UserTable%中的用户的%s}
{{user.Username}
{AllRoles%中角色的%s}
{%if角色在user.Roles%}是{%else%}否{%endif%}
{%endfor%}
{%endfor%}

Hmmm这似乎与我的第一个示例相同?还是我错过了一些微妙的东西?事实上,在hindisght中,我的Q是不清楚的。我有一个所有可能角色的列表,这是
Data={'Roles':Roles,…}
部分所指的角色。抱歉,我会更新问题的。假设你的答案是正确的,我一定是因为拼写错误导致语法错误。我会再试一次。@Basic另一个选项是
User['TableRoles']=[[r,r in User['roles']]对于r in roles]
并且在模板中:
{%for role,has_role in User.TableRoles%}
@Basic您能显示问题中提到的语法错误吗?
<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>